重命名$ project聚合管道上的字段

时间:2018-10-31 20:20:19

标签: mongodb mongodb-query aggregation-framework

我需要重命名数组中的文档字段。这是我的文件:

"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "level" : 1,
        "tag" : "AB"
    },
    {
        "level" : 2,
        "tag" : "AA"
    },
    {
        "level" : 3,
        "tag" : "BB"
    }
]

在我的$ project阶段,我需要将 level 子文档字段重命名为 indice ,但是我没有成功。

这是我的聚合函数和不需要的结果:

db.test.aggregate({$project: {color:1, 'levels.tag':1, 'levels.indice': '$levels.level'}}).pretty()

不需要的结果:

"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "tag" : "AB",
        "indice" : [
            1,
            2,
            3
        ]
    },
    {
        "tag" : "AA",
        "indice" : [
            1,
            2,
            3
        ]
    },
    {
        "tag" : "BB",
        "indice" : [
            1,
            2,
            3
        ]
    }
]

我只是希望得到以下结果:

"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "indice" : 1,
        "tag" : "AB"
    },
    {
        "indice" : 2,
        "tag" : "AA"
    },
    {
        "indice" : 3,
        "tag" : "BB"
    }
]

有人可以帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

使用$map来迭代级别并重命名该字段。 $addFields保留所有现有字段。

db.test.aggregate({
  "$addFields":{
    "levels":{
      "$map":{
        "input":"$levels",
        "in":{
          "indice":"$$this.level",
          "tag":"$$this.tag"
        }
      }
    }
  }
})