只要MongoDB在聚合管道中提供$group
方法,它就会返回文档列表,其中_id
保留一些“不同”的分组值,而其他字段保留按给定条件分组的文档数组。
我想要返回一个文档,其中属性是聚合的结果。
示例集合:
{author: "Author1", title: "Title1"}
{author: "Author2", title: "Title2"}
{author: "Author2", title: "Title3"}
聚合
db.getCollection('books').aggregate([
{"$group": {
_id: "$author",
books: { $push: "$$ROOT" }
}
}
])
这给了我以下输出:
{_id: 'Author1', books: [{author: "Author1", title: "Title1"}]},
{_id: 'Author2', books: [{author: "Author2", title: "Title2"}, {author: "Author2", title: "Title3"}]}
但是我希望将结果作为一个单个对象获得,像这样:
{
Author1: [
{author: "Author1", title: "Title1"}
],
Author2: [
{author: "Author2", title: "Title2"},
{author: "Author2", title: "Title3"}
]
}
简单地说,我想将_id
属性用作结果文档中的新字段,并且特定$group
的正确_id
值必须是新变量的值。
如果有人遇到这样的问题,请提供帮助或提供一些解决方法的线索。预先感谢。
答案 0 :(得分:1)
您可以尝试以下汇总
db.getCollection('books').aggregate([
{ "$group": {
"_id": "$author",
"books": { "$push": "$$ROOT" }
}},
{ "$group": {
"_id": null,
"data": {
"$push": { "k": "$_id", "v": "$books" }
}
}},
{ "$replaceRoot": {
"newRoot": { "$arrayToObject": "$data" }
}}
])