如何汇总结果并按给定字段分组?

时间:2020-03-29 21:29:07

标签: node.js mongodb mongoose aggregation-framework

我有这样的文件

items = [{
        owner: [{ name: "user1" }, { name: "user2" }]
    },
    {
        owner: [{ name: "user1" }, { name: "user2" }]
    },
    {
        owner: [{ name: "user2" }, { name: "user3" }, { name: "user4" }]
    }];

所以我需要计算相同的name的数量并按name进行分组,并像这样对它们进行排名

results = [{ name: "user2", count: 3 },
    { name: "user1", count: 2 },
    { name: "user3", count: 1 },
    { name: "user4", count: 1 }];

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总:

db.collection.aggregate([
    {
        $unwind: "$owner"
    },
    {
        $group: {
            _id: "$owner.name",
            count: { $sum: 1 }
        }
    },
    {
        $project: {
            _id: 0,
            name: "$_id",
            count: 1
        }
    },
    {
        $sort: {
            count: -1
        }
    }
])

$unwind可用于获取每个文档的单个名称,然后您需要$group进行计数并需要$sort进行排名

Mongo Playground