node.js - 需要从 $aggregate 小组赛阶段返回 x 份文档

标签 node.js mongodb mongoose aggregation-framework

如果我有一堆文档

{_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/

相关文章:

node.js - Mongoose {严格: throw} doesn't throw error

javascript - Mongoose ( Node js)中的填充方法

node.js - 用户注册完成后如何返回 token ?

node.js - 为什么我的node_modules中有@angular/core,但仍然出现此错误?

mongodb - 如何在 Mongodb 的嵌入式文档中添加新文档

MongoDb 数据库与集合

node.js - 在 DynamoDB NodeJS 中查询的 OR 条件表达式

javascript - 如何在 Knex JS 中使用 IS NOT NULL

java - 安卓/MongoDB : "NoClassDefFoundError: com.mongodb.DBPortPool"

javascript - 如果我链接 .sort(), Mongoose 查询会失败