首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用mongodb对$group聚合输出进行排序

如何使用mongodb对$group聚合输出进行排序
EN

Stack Overflow用户
提问于 2014-07-03 20:59:23
回答 1查看 3.8K关注 0票数 0

我正在根据发件人的id对文档(电子邮件)集合进行排序,然后以最频繁的发送返回发件人的id,限制为5。我非常接近,但由于需要对组进行排序,所以我很难理解语法。我了解到,在mongodb中,$group操作符不会对输出进行排序,一旦对输出进行了分组,我现在如何排序输出。我尝试将.sort()加到查询序列的末尾,并将输出设置为等于变量,并对其调用.sort().limit(),但没有结果。

我有以下情况

代码语言:javascript
运行
复制
cursor = db.emailcol.aggregate( 

    [{ $group : {_id : {emails_sent: "$sender_id"}, number : { $sum : 1} }},
        {$sort : {"_id.sender_id": 1}}

    ]
);

while ( cursor.hasNext() ) {
    printjson( cursor.next() );
};

返回:

代码语言:javascript
运行
复制
{ "_id" : { "emails_sent" : "6" }, "number" : 3 }
{ "_id" : { "emails_sent" : "5" }, "number" : 2 }
{ "_id" : { "emails_sent" : "3" }, "number" : 1 }
{ "_id" : { "emails_sent" : "4" }, "number" : 2 }
{ "_id" : { "emails_sent" : "2" }, "number" : 1 }

如何才能在分组的输出上运行排序方法,或者仅仅将排序和限制添加到查询中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 21:18:25

聚合管道的排序阶段应该是:

代码语言:javascript
运行
复制
{$sort : {"_id.emails_sent": 1}}

而不是:

代码语言:javascript
运行
复制
{$sort : {"_id.sender_id": 1}}

因为$group阶段的输出没有一个带有字段sender_id的子文档。要调试这些问题,将有助于查看管道的每个阶段的输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24563221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档