更改名称聚合字段mongodb

更改名称聚合字段mongodb,mongodb,mongoose,Mongodb,Mongoose,我正在MongoDB中进行聚合,我想更改引用字段的名称: 这是我的总结: [     {"$ match": {     "attrName": {$ in: arr}}},     {"$ group": {         "_id": {             "recvTime": "$ recvTime",             "attrName": "$ attrName",             "attrValue": "$ attrValue"         }  

我正在MongoDB中进行聚合,我想更改引用字段的名称:

这是我的总结:

[

    {"$ match": {
    "attrName": {$ in: arr}}},
    {"$ group": {
        "_id": {
            "recvTime": "$ recvTime",
            "attrName": "$ attrName",
            "attrValue": "$ attrValue"
        }
    }},
    {"$ group": {
        "_id": "$ _id.attrName",
        "dates": {
            "$ push": {
                "recvTime": "$ _id.recvTime",
                "attrValue": "$ _id.attrValue"

            },
        },
    }}
    ]
这是你的答案:

[
    {
        "_id": "var_ContadorRiego",
        "dates": [
            {
                "recvTime": "2018-03-24T01: 18: 18.619Z",
                "attrValue": "12"
            },
            {
                "recvTime": "2018-03-25T01: 18: 18.619Z",
                "attrValue": "19"
            }
        ]
    },
    {
        "_id": "var_TempExt",
        "dates": [
            {
                "recvTime": "2018-03-25T01: 18: 18.619Z",
                "attrValue": "16.511116"
            },
            {
                "recvTime": "2018-03-24T01: 18: 18.619Z",
                "attrValue": "12.511116"
            }
        ]
    }
]
我希望它在哪里写着_idput name,在哪里写着recvTime put name,在哪里写着attrValue put value

最终目标如下:

[
     {
         "name": "var_ContadorRiego",
         "dates": [
             {
                 "name": "2018-03-24T01: 18: 18.619Z",
                 "value": "12"
             },
             {
                 "name": "2018-03-25T01: 18: 18.619Z",
                 "value": "19"
             }
         ]
     },
     {
         "name": "var_TempExt",
         "dates": [
             {
                 "name": "2018-03-25T01: 18: 18.619Z",
                 "value": "16.511116"
             },
             {
                 "name": "2018-03-24T01: 18: 18.619Z",
                 "value": "12.511116"
             }
         ]
     }
]
这可以直接从聚合中完成吗?或者我必须遍历整个对象并进行更改


问候并感谢您。

首先通过以下方式更改第二个$group

{"$group": {
    "_id": "$_id.attrName",
    "dates": {
        "$ push": {
            "time": "$_id.recvTime",
            "name": "$_id.attrName",
            "value": "$ _id.attrValue"
        },
    },
}} 
然后使用聚合管道末尾的$project重命名\u id字段

{ $project: {  
      _id: 0,
      name: "$_id",
   }
}

我希望这会对你有用。

将最后两个阶段更改为
{“$group”:{“\u id”:“$\u id.attrName”,“dates”:{“$push”:{“name”:“$\id.recvTime”,“value”:“$\u id.attrValue”}}},{“$project”:{“name”:“$\u id”,“\u id”:0,“dates”:1}
你好,这对我来说很有效,但它将id名称显示在最后一个位置,因为我可以将它放在开头?[{“日期”:[{“名称”:“var_TempExt”,“值”:“16.511116”},{“名称”:“var_TempExt”,“值”:“12.511116”}],“name”:“var_TempExt”}您好,我使用同志说的方法添加日期:1但是id名称出现在[{“dates”:[{“name”:“var_TempExt”,“value”:“16.511116”},{“name”:“var_TempExt”,“value”:“12.511116”}],“name”:“var_TempExt”}]@Manolait将日期:1放在$project的末尾。