我正在根据发件人的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 }如何才能在分组的输出上运行排序方法,或者仅仅将排序和限制添加到查询中?
发布于 2014-07-03 21:18:25
聚合管道的排序阶段应该是:
{$sort : {"_id.emails_sent": 1}}而不是:
{$sort : {"_id.sender_id": 1}}因为$group阶段的输出没有一个带有字段sender_id的子文档。要调试这些问题,将有助于查看管道的每个阶段的输出。
https://stackoverflow.com/questions/24563221
复制相似问题