0

通过聚合框架传输各种文档后,我终于有了结果文档。

现在的问题是我只想要 $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

有什么建议么?

4

2 回答 2

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

您可以在此处找到显示此内容的示例

于 2012-12-03T21:17:07.000 回答
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使用$firstand应用另一个文档$last。结果:

{
        "result" : [
                {
                        "_id" : null,
                        "first" : "Elizabet Kleine",
                        "last" : "Mariela Sherer"
                }
        ],
        "ok" : 1
}

注意"_id" : null. 这是必要的吗?
如果有人有更好的解决方案,请分享。

于 2012-12-03T21:55:45.783 回答