需要从$ aggreagate小组阶段返回x个文档

如果我有一堆文件

{_id: mongoId, submittedTo: mongoId, viewCount: 2 } 

如果我想返回x数量最高的viewCount为最低的文档(每个submitTo)。 如何使用mongoose/ mongodb进行聚合?

我从这个问题中了解到了$第一个使用MongoDB聚合在数字字段中返回最大值的文档,但是当您需要返回多个文档(每个$ group的_id)时,它的用例似乎无效。

到目前为止,我有

 {$sort: {viewCount: -1}}; {$group : {_id: '$submittedTo'}}; 

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

我不认为有一个好方法可以在一个集合中同时覆盖每个submittedTo值。 要独立于其他组sorting每个viewCount组的viewCount集合,并且要独立于其他组来限制每个组的结果数量是困难的或不可能的。 但是,使用find查询为一个submittedTo值做足够简单的事情:

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

尝试使用$ limit来获得第一个x结果。

 {$limit: x}