需要从$ aggregate group阶段返回x个文档

时间:2014-11-19 18:04:33

标签: node.js mongodb mongoose aggregation-framework

如果我有一堆文件

{_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'}};

但不知道我还需要添加到小组赛阶段,以达到所需的效果。

2 个答案:

答案 0 :(得分:1)

我认为在一个涵盖同时覆盖每个submittedTo值的聚合中,有一种很好的方法可以做到这一点。很难或不可能独立于其他组对每个submittedTo组的viewCount值集合进行排序,并且可以独立于其他组限制每个组的结果数量。但是,使用查询查询可以很容易地为一个submittedTo值执行:

db.collection.find({ "submittedTo" : <some id> }).sort({ "viewCount" : -1 }).limit(x)

答案 1 :(得分:0)

尝试使用$ limit来获取前x个结果。

{$limit: x}