node.js - 限制 mongoDB 聚合中不同类型结果的数量

标签 node.js mongodb mongoose mongodb-query aggregation-framework

我想编写一个包含以下文档的聚合:

{ type: "dog", name: "Charlie" }
{ type: "dog", name: "Felix" }
{ type: "dog", name: "John" }
{ type: "cat", name: "Tum" }

并返回每种类型最多 2 个,不以任何单独的方式分组:

{ type: "dog", name: "Charlie" }
{ type: "dog", name: "Felix" }
{ type: "cat", name: "Tum" }

意味着最多两只猫加上最多两只狗。分组和限制路子走这里吗?如果是这样 - 怎么办?

最佳答案

您可以按类型对文档进行分组,为每组创建一个名称列表, $project 列表只有两个元素 $slice ,然后使用 $unwind 展平列表,如下所示:

Model.aggregate([
    { "$group": {
        "_id": "$type",
        "data": { "$push": "$name" }
    } },
    { "$project": {
        "type": "$_id",
        "name": { "$slice": ["$data", 2] }
    } },
    { "$unwind": "$name" }
]).exec(callback);

关于node.js - 限制 mongoDB 聚合中不同类型结果的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48988074/

相关文章:

javascript - MEANJS TypeError : Route. all() 需要回调函数,但得到一个 [对象未定义]

javascript - 在 Mongo 中查找包含 ISODate 字段的文档

javascript - Mongoose 填充虚拟而不是整个架构

javascript - Mongodb 在模式级别生成默认随机数正在生成相同的数字

javascript - 检查查询结果是否属于一个实例

mongodb - "Structured"MongoDB分组查询

Node.js、套接字、io 和 HTTPS

node.js - 如何转换多个Mongoose文档?

node.js - 如何拦截 Express.js 中的多部分文件流?

javascript - 在常规 JavaScript 文件中导入 NodeJS 文件