如果我有一堆文档
{_id: mongoId,
submittedTo: mongoId,
viewCount: 2
}
如果我想返回 x 个具有最高 viewCount 到最低每个 SubmitTo 的文档。我如何使用 mongoose/mongodb 进行聚合来做到这一点?
我从这个问题中了解了$first Return a document with the max value on a number field using MongoDB aggregation但当您需要为每个 $group 的 _id 返回多个文档时,它的用例似乎无效。
到目前为止我已经
{$sort: {viewCount: -1}};
{$group : {_id: '$submittedTo'}};
但不知道我还需要在小组赛中添加什么,才能达到所需的效果。
最佳答案
我认为没有一种好方法可以在一个聚合中同时涵盖每个 SubmitTo 值来执行此操作。独立于其他组对每个 subscribedTo
组的 viewCount
值集合进行排序,并独立于其他组限制每个组的结果数量是很困难或不可能的。不过,使用查找查询来获取一个 subscribedTo
值非常容易:
db.collection.find({ "submittedTo" : <some id> }).sort({ "viewCount" : -1 }).limit(x)
关于node.js - 需要从 $aggregate 小组赛阶段返回 x 份文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023826/