首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带过滤器嵌入式文档NoseJS的Mongodb聚合

带过滤器嵌入式文档NoseJS的Mongodb聚合
EN

Stack Overflow用户
提问于 2019-06-04 17:32:39
回答 1查看 84关注 0票数 0

我正在查阅我的API,并将其作为参数传递给一个台站数组

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

我得到的答案如下:

代码语言:javascript
复制
   {
   "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":""
         }
      }
   ]
}

我只需要在191年和1123中出现在id_station上的ID,而不需要其他的ID。

我正在用过滤器进行测试,但它不能正常工作。

这是我的密码:

代码语言:javascript
复制
   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 })
            })
    }

其结果应该是:

代码语言:javascript
复制
{
   "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

代码语言:javascript
复制
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
                }
            }

        ],
EN

回答 1

Stack Overflow用户

发布于 2019-06-05 08:29:40

最后,经过几次测试,我找到了解决方案,在项目中添加了一个过滤器,并添加了其余的字段。

代码语言:javascript
复制
 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 })
            })
    }

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56448781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档