我有一个类似于以下的文档,我想将当前顶级文档的一个字段作为结果数组中的顶级文档本身返回:
{
field1:{contents:{}}
field2:{othercontent:{}}
}
我希望我的聚合查询的结果返回以下
{
contents:{}
}
这可以通过 $project 和聚合框架来完成吗?
我有一个类似于以下的文档,我想将当前顶级文档的一个字段作为结果数组中的顶级文档本身返回:
{
field1:{contents:{}}
field2:{othercontent:{}}
}
我希望我的聚合查询的结果返回以下
{
contents:{}
}
这可以通过 $project 和聚合框架来完成吗?
是的,您可以使用它$project
来做到这一点。您只需告诉它使用点表示法contents
检索嵌套对象:
db.items.aggregate( {$project: {contents:'$field1.contents'}} );
此外,如果您想_id
从输出中隐藏该字段,您可以_id: 0
在$project
参数中指定:
db.items.aggregate( {$project: {contents:'$field1.contents', _id:0}} );
开始Mongo 3.4
,$replaceRoot
聚合运算符可用于将文档替换为另一个文档(在我们的示例中为子文档):
// { field1: { content: { a: 1, b: 2 } }, field2: { othercontent: {} } }
// { field1: { content: { c: 1, d: 2 } }, field2: { othercontent: {} } }
db.collection.aggregate({ $replaceRoot: { newRoot: "$field1" } })
// { content: { a: 1, b: 2 } }
// { content: { c: 1, d: 2 } }
开始Mongo 4.2
,$replaceWith
也可以使用运算符:
db.collection.aggregate({ $replaceWith: "$field1" })