簡體   English   中英

使用過濾器嵌入文檔NoseJS進行Mongodb聚合

[英]Mongodb aggregation with filter embedded document NoseJS

我正在咨詢我的API,我作為參數傳遞一系列電台

http:// localhost:3790 / api / getSensorIdstation / 191,1123

我得到的答案如下:

   {
   "Station_types":[
      {
         "_id":"5cc85899a0160f16c50f4199",
         "marca":"Hortisis",
         "modelo":"Estacion",
         "fabricante":"Hortisis",
         "id_station":[
            "191",
            "457",
            "459",
            "463",
            "465",
            "426",
            "424"
         ],
         "sensor_type":{
            "name":"2",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/temp.png",
            "name_comun":"Temp. Ambiente",
            "medida":"ºC",
            "interfaz":"greenhouse"
         }
      },
      {
         "_id":"5cc85899a0160f16c50f4199",
         "marca":"Hortisis",
         "modelo":"Estacion",
         "fabricante":"Hortisis",
         "id_station":[
            "191",
            "457",
            "459",
            "463",
            "465",
            "426",
            "424"
         ],
         "sensor_type":{
            "name":"3",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/hum.png",
            "name_comun":"Hum. Relativa",
            "medida":"%",
            "interfaz":""
         }
      },
      {
         "_id":"5cebaa26c6b02a54c6a3f782",
         "marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "id_station":[
            "1123"
         ],
         "sensor_type":{
            "name":"3",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/hum.png",
            "name_comun":"Hum. Relativa",
            "medida":"%",
            "interfaz":""
         }
      },
      {
         "_id":"5cebaa26c6b02a54c6a3f782",
         "marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "id_station":[
            "1123"
         ],
         "sensor_type":{
            "name":"43",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/humidity.png",
            "name_comun":"Def. vapor de presión",
            "medida":"kPa",
            "interfaz":""
         }
      }
   ]
}

我只需要在id_station上查詢的ID在191和1123中出現,而不是其余的。

我正在測試過濾器,但它無法正常工作。

這是我的代碼:

   function getSensorIdstation(req, res) {
        var array = req.params.id_station;
        var arr = array.split(',');
        Station_types.aggregate([
                { "$match": { "id_station": { "$in": arr } } },
                { "$unwind": "$sensor_type" },


            ],
            (err, Station_types) => {
                if (err) return res.status(500).send({ message: 'Error al realizar la peticion' })
                if (!Station_types) return res.status(404).send({ message: 'Error el usuario no existe' })

                res.status(200).send({ Station_types })
            })
    }

結果應該是這樣的:

{
   "Station_types":[
      {
         "_id":"5cc85899a0160f16c50f4199",
         "marca":"Hortisis",
         "modelo":"Estacion",
         "fabricante":"Hortisis",
         "id_station":[
            "191"
         ],
         "sensor_type":{
            "name":"2",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/temp.png",
            "name_comun":"Temp. Ambiente",
            "medida":"ºC",
            "interfaz":"greenhouse"
         }
      },
      {
         "_id":"5cc85899a0160f16c50f4199",
         "marca":"Hortisis",
         "modelo":"Estacion",
         "fabricante":"Hortisis",
         "id_station":[
            "191"
         ],
         "sensor_type":{
            "name":"3",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/hum.png",
            "name_comun":"Hum. Relativa",
            "medida":"%",
            "interfaz":""
         }
      },
      {
         "_id":"5cebaa26c6b02a54c6a3f782",
         "marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "id_station":[
            "1123"
         ],
         "sensor_type":{
            "name":"3",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/hum.png",
            "name_comun":"Hum. Relativa",
            "medida":"%",
            "interfaz":""
         }
      },
      {
         "_id":"5cebaa26c6b02a54c6a3f782",
         "marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
         "id_station":[
            "1123"
         ],
         "sensor_type":{
            "name":"43",
            "type":"clima",
            "place":"interior",
            "img":"assets/img/humidity.png",
            "name_comun":"Def. vapor de presión",
            "medida":"kPa",
            "interfaz":""
         }
      }
   ]
}

編輯

添加過濾器代碼:但它不返回其余字段,只返回id_station

Station_types.aggregate([
            { "$match": { "id_station": { "$in": arr } } },

            { "$unwind": "$sensor_type" },
            {
                $project: {
                    sensor_type: {
                        $filter: {
                            input: '$id_station',
                            as: 'shape',
                            cond: { $in: ['$$shape', arr] }
                        }
                    },
                    _id: 0
                }
            }

        ],

最后,我在幾次測試后找到了解決方案,在項目中添加了一個過濾器,並添加了其余的字段。

 function getSensorIdstation(req, res) {
        var array = req.params.id_station;
        console.log(array);

        var arr = array.split(',');
        console.log(arr);

        Station_types.aggregate([
                { "$match": { "id_station": { "$in": arr } } },

                { "$unwind": "$sensor_type" },
                {
                    $project: {
                        _id: 0,
                        id_station: {
                            $filter: {
                                input: '$id_station',
                                as: 'shape',
                                cond: { $in: ['$$shape', arr] }
                            }
                        },
                        marca: "$marca",
                        modelo: "$modelo",
                        fabricante: "$fabricante",
                        sensor_type: {
                            name: "$sensor_type.name",
                            type: "$sensor_type.type",
                            place: "$sensor_type.place",
                            img: "$sensor_type.img",
                            name_comun: "$sensor_type.name_comun",
                            medida: "$sensor_type.medida",
                            interfaz: "$sensor_type.interfaz"
                        }

                    }
                }


            ],
            (err, Station_types) => {
                if (err) return res.status(500).send({ message: 'Error al realizar la peticion' })
                if (!Station_types) return res.status(404).send({ message: 'Error el usuario no existe' })
                    /*SensorRecuperado.sort(function(a, b) {
                        return b.name_comun.localeCompare(a.name_comun);
                    })*/
                res.status(200).send({ Station_types })
            })
    }

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM