簡體   English   中英

聚合 mongodb 將對象更改為數組

[英]Aggregate mongodb change objects to array

我正在使用 mongodb 聚合,我需要將我的 object 數組的一部分替換為數組串聯。 我知道我必須修改的部分是推送,但它是作為對象添加的,我不太清楚如何連接該部分

這是我當前的聚合:

Datagreenhouse.aggregate([
        { "$match": { "id_sensor_station_absolute": { "$in": arr }, "recvTime": { $gte: fechainicio, $lte: fechafin } } }, //, "id_station": { "$in": id_station }
        {
            "$lookup": {
                "from": "station_types",
                "localField": "id_station", // local field in measurements collection
                "foreignField": "id_station", //foreign field from sensors collection
                "as": "sensor"
            }
        },
        { "$unwind": "$sensor" },
        {
            "$addFields": {
                "sensor.attrValue": "$attrValue", // Add attrValue to the sensors
                "sensor.recvTime": "$recvTime", // Add attrName to the sensors
                "sensor.marca": "$sensor.marca",
                "sensor.sensor_type": {
                    $filter: {
                        input: '$sensor.sensor_type',
                        as: 'shape',
                        cond: { $eq: ['$$shape.name', '$attrName'] },
                    }
                }
            }
        },
        {
            "$group": {
                "_id": {
                    "name_comun": "$sensor.sensor_type.name_comun",
                    "name_comun2": "$sensor.marca"
                }, // Group by time

                "data": {
                    "$push": {
                        "name": "$sensor.recvTime",
                        "value": "$sensor.attrValue",
                    },
                },
            }
        },
        {
            "$project": {
                "name": {
                    $reduce: {
                        input: [
                            ["$_id.name_comun2"]
                        ],
                        initialValue: "$_id.name_comun",
                        in: { $concatArrays: ["$$value", "$$this"] }
                    }
                },
                "_id": 0,
                "data": 1
            }
        }
    ]

此聚合的當前 output 為:

[
   {
      "data":[
         {
            "name":"2020-06-04T14:30:50.00Z",
            "value":69.4
         },
         {
            "name":"2020-06-04T14:13:31.00Z",
            "value":68.9
         }
      ],
      "name":[
         "Hum. Relativa",
         "Hortisys"
      ]
   },
   {
      "data":[
         {
            "name":"2020-06-04T14:30:50.00Z",
            "value":25.5
         },
         {
            "name":"2020-06-04T14:13:31.00Z",
            "value":26.6
         }
      ],
      "name":[
         "Temp. Ambiente",
         "Hortisys"
      ]
   }
]

我需要更改數據的數據格式: [[], [], []] 示例:

[
       {
          "data":[
             
               ["2020-06-04T14:30:50.00Z",69.4],
                              
               ["2020-06-04T14:13:31.00Z",68.9],
          "name":[
             "Hum. Relativa",
             "Hortisys"
          ]
       },
       {
          "data":[
             
               ["2020-06-04T14:30:50.00Z",69.4],
                              
               ["2020-06-04T14:13:31.00Z",68.9],
          "name":[
             "Temp. Ambiente",
             "Hortisys"
          ]
       }
]

$push運算符不會直接接受數組,但您可以給它另一個返回數組的運算符,例如

  data:{ $push:{ $concatArrays:[[ "$sensor.recvTime", "$sensor.attrValue" ]]}},

暫無
暫無

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

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