需要从$ 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}