我正在查找按发件人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 }
如何在分组的输出上运行排序方法,或者仅将排序和限制添加到查询中?
聚合管道的排序阶段应为:
{$sort : {"_id.emails_sent": 1}}
而不是:
{$sort : {"_id.sender_id": 1}}
因为$ group阶段的输出没有带有field的子文档sender_id
。要调试此类问题,将有助于查看管道每个阶段的输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句