我想编写一个包含以下文档的聚合:
{ 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/