我有一个集合说user
。每个文档的结构都是这样的
_id:String
status:Int32
account:{
firstName:
lastName:
.. some other nested property
}
..some more property
我的最终目标是在fullName
字段中生成一个新的嵌套字段account
,该字段是两个名称字段的串联。我可以像这样运行aggregate
查询
db.user.aggregate(
[
{ $project: { 'account.name': { $concat: [ "$account.firstName", " ", "$account.lastName" ] } } }
])
如果我将$out
与db name一起写,但我的现有数据会被替换。我如何实际合并,以便我的最终结构保持为
_id:String
status:Int32
account:{
firstName:String
lastName:String
fullName:String
.. some other nested property
}
..some more property
答案 0 :(得分:1)
在 $project
管道中,您需要在embedded fields上使用点符号包含其他字段,如下所示:
db.user.aggregate([
{
"$project": {
"status": 1,
"field1": 1, // the other properties
"field2": 1,
"account.firstName": 1,
"account.lastName": 1,
"account.name": {"$concat":["$account.firstName", " ", "$account.lastName"]}
}
},
{ "$out": "tempcollection" }
])