我需要重命名数组中的文档字段。这是我的文件:
"_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"
}
]
有人可以帮助我吗?非常感谢!
答案 0 :(得分:1)
使用$map
来迭代级别并重命名该字段。 $addFields
保留所有现有字段。
db.test.aggregate({
"$addFields":{
"levels":{
"$map":{
"input":"$levels",
"in":{
"indice":"$$this.level",
"tag":"$$this.tag"
}
}
}
}
})