Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Đếm trường unique nhóm theo trường khác MongoDB aggregation

Double $group để đếm distinct theo nhóm

Sử dụng 2 stage $group: stage 1 nhóm theo cặp trường (tạo distinct), stage 2 nhóm theo trường đầu và đếm.

Dữ liệu tên

> db.demo354.insertOne({"Name1": "Chris", "Name2": "David"});
> db.demo354.insertOne({"Name1": "Chris", "Name2": "David"});
> db.demo354.insertOne({"Name1": "Chris", "Name2": "Bob"});
> db.demo354.insertOne({"Name1": "Carol", "Name2": "John"});
> db.demo354.insertOne({"Name1": "Carol", "Name2": "John"});

Pipeline đếm unique Name2 theo Name1

> db.demo354.aggregate([
    {
        $group: {
            _id: { "Name1": "$Name1", "Name2": "$Name2" }
        }
    },
    {
        $group: {
            _id: "$_id.Name1",
            "Name2": { $sum: 1 }
        }
    },
    {
        $project: {
            _id: 0,
            Name1: "$_id",
            Name2: 1
        }
    }
]);

Kết quả

{ "Name2": 2, "Name1": "Chris" }  // David, Bob
{ "Name2": 1, "Name1": "Carol" }  // John

Logic: Stage 1 tạo distinct cặp (Name1, Name2). Stage 2 nhóm theo Name1 và đếm số cặp distinct. Stage 3 format output.

MongoDB 4.4+: Dùng $setUnion hoặc $addToSet trong $group đơn lẻ.