如何在MongoDB中的"group by"之后将字段内的文档取出?

How to get the document inside a field out after "group by" in MongoDB?

我处理的文档是这样的:

{
    "id" : "98syf87erfw8n"
    "foo" : { "objectid" : "39", "stuff" : "65" },
    "yearpublished" : "1979",
    .
    .
    .
}

这是我使用的查询:

db.foobar.aggregate([
    { $group : {
        _id : '$yearpublished',
        myItem: { $first: "$$ROOT" }
    }}
])

最终输出形式为:

{
    { "_id" : "1923", "myItem" : {
                            "id" : "98syf87erfw8n",
                            "foo" : { "objectid" : "39", "stuff" : "65" },
                            "yearpublished" : "1979"
                        }
    }, 
    { "_id" : "1453", "myItem" : {
                            "id" : "88888888888",
                            "foo" : { "objectid" : "394", "stuff" : "55" },
                            "yearpublished" : "1453"
                            "author" : "Ravi Kiran"
                        }
    }
};

但我希望输出为:

{
    "id" : "98syf87erfw8n",
    "foo" : { "objectid" : "39", "stuff" : "65" },
    "yearpublished" : "1979"
},
{
    "id" : "88888888888",
    "foo" : { "objectid" : "394", "stuff" : "55" },
    "yearpublished" : "1453",
    "author" : "Ravi Kiran"
}

意思是我要把myItem字段里面的那些文件弄出来。 我该怎么做?

$group 可以完成工作后的另一个项目阶段:

{
 $project: {
  yearpublished: "$myItem.yearpublished",
  foo: "$myItem.foo",
  id: "$myItem.id",
  _id: 0
 }
}

playground

你可以使用 $replaceRoot

Play

db.collection.aggregate({
  "$replaceRoot": {
    "newRoot": "$myItem"
  }
})

您的输出中存在语法错误。

"id" : 98syf87erfw8n,无效。

应该是"id" : "98syf87erfw8n",注意引号

第二个对象 yearPublished 后缺少逗号。