通过聚合框架管理各种文档后,我终于得到了结果文档。
现在的问题是我只想要$ first和$ last文档。
最终文件看起来像这样(巨大的清单):
...
{
"_id" : "Kaila Deibler",
"count" : 406
},
{
"_id" : "Jessika Dagenais",
"count" : 406
},
{
"_id" : "Tamika Schildgen",
"count" : 404
},
...
我用来制作文档的mongo shell命令是:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}])
但我只需要第一个和最后一个文件,所以我尝试了这样的事情:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}, {$first: "$_id"}])
我尝试了其他实施,但似乎无法确定实施$first
和$last
有什么建议吗?
答案 0 :(得分:1)
$first
和$last
是$group
管道中的聚合函数,这意味着您需要在$group
文档中使用它们。
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}, first: {$first:"$_id"}}}, {$sort: {count: -1}}])
同样适用于$last
您可以找到显示此here
的示例答案 1 :(得分:0)
以下是我对这个问题的回答:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}, {$group: {_id: "$_id.comments.author", first: {$first: "$_id"}, last: {$last: "_id"}}}])
由于我想在排序后提取第一个和最后一个文档,因此我必须使用$group
和$first
应用另一个$last
。结果:
{
"result" : [
{
"_id" : null,
"first" : "Elizabet Kleine",
"last" : "Mariela Sherer"
}
],
"ok" : 1
}
请注意"_id" : null
。这有必要吗?
如果有人有更好的解决方案,请分享。