如果我有一堆文件
{_id: mongoId,
submittedTo: mongoId,
viewCount: 2
}
如果我想将每个submitTo中具有最高viewCount的x个文档返回到最低。如何使用mongoose / mongodb进行聚合?
我从这个问题中学到了第一个 Return a document with the max value on a number field using MongoDB aggregation但是当你需要为$ group的_id返回多个文档时,它的用例似乎无效。
到目前为止我已经
了{$sort: {viewCount: -1}};
{$group : {_id: '$submittedTo'}};
但不知道我还需要添加到小组赛阶段,以达到所需的效果。
答案 0 :(得分:1)
我认为在一个涵盖同时覆盖每个submittedTo值的聚合中,有一种很好的方法可以做到这一点。很难或不可能独立于其他组对每个submittedTo
组的viewCount
值集合进行排序,并且可以独立于其他组限制每个组的结果数量。但是,使用查询查询可以很容易地为一个submittedTo
值执行:
db.collection.find({ "submittedTo" : <some id> }).sort({ "viewCount" : -1 }).limit(x)
答案 1 :(得分:0)
尝试使用$ limit来获取前x个结果。
{$limit: x}