我正在查找按发件人ID分类的文档(电子邮件)的集合,然后返回最常发送的发件人ID,限制为5.我很近但很挣扎现在我需要对组进行排序。据我所知,使用mongodb $group
运算符不对输出进行排序,如何将输出分组后立即对输出进行排序。我已经尝试在查询序列的末尾添加.sort()
,并将输出设置为等于变量并在其上调用.sort().limit()
无效。
我有如下
cursor = db.emailcol.aggregate(
[{ $group : {_id : {emails_sent: "$sender_id"}, number : { $sum : 1} }},
{$sort : {"_id.sender_id": 1}}
]
);
while ( cursor.hasNext() ) {
printjson( cursor.next() );
};
返回:
{ "_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 }
如何在分组输出上运行排序方法,或者只是为查询添加排序和限制?
答案 0 :(得分:2)
汇总管道的排序阶段应为:
{$sort : {"_id.emails_sent": 1}}
而不是:
{$sort : {"_id.sender_id": 1}}
因为$ group阶段的输出没有包含字段sender_id
的子文档。要调试这些问题,将有助于查看管道的每个阶段的输出。