我可以使用$ project将字段作为mongo聚合查询中的顶级文档返回吗?

时间:2013-10-17 18:17:32

标签: mongodb mongodb-query

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

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

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

{
  contents:{}
}

可以使用$ project和聚合框架吗?

2 个答案:

答案 0 :(得分:16)

是的,您可以使用$project来执行此操作。您只需要告诉它使用dot notation检索嵌套的contents对象:

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

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

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

答案 1 :(得分: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" })