28

我有一个类似于以下的文档,我想将当前顶级文档的一个字段作为结果数组中的顶级文档本身返回:

{ 
  field1:{contents:{}}
  field2:{othercontent:{}}
}

我希望我的聚合查询的结果返回以下

{
  contents:{}
}

这可以通过 $project 和聚合框架来完成吗?

4

2 回答 2

33

是的,您可以使用它$project来做到这一点。您只需告诉它使用点表示法contents检索嵌套对象:

db.items.aggregate( {$project: {contents:'$field1.contents'}} );

此外,如果您想_id从输出中隐藏该字段,您可以_id: 0$project参数中指定:

db.items.aggregate( {$project: {contents:'$field1.contents', _id:0}} );
于 2013-10-17T19:16:02.157 回答
14
  • 开始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" })
    
于 2019-06-09T16:17:46.783 回答