Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

คำสั่ง MongoDB นับค่าที่ไม่ซ้ำกัน (Distinct) ทั่วทั้งเอกสาร


สำหรับกรณีนี้ ให้ใช้ aggregate() ใน MongoDB มาสร้างคอลเล็กชันกันเถอะ

> db.demo718.insertOne(
    {
        "id":101,
        "details":
        {
            "OtherDetails": ["Chris", "Mike", "Sam"], "GroupName": ["Group-1"], "Info": []
        }
    }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5eaae25843417811278f5880") }
> db.demo718.insertOne(
    {
        "id":102,
        "details":
        {
            "OtherDetails": ["Chris", "David"], "GroupName": ["Group-1"], "Info": []
        }
    }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5eaae25943417811278f5881") }

แสดงเอกสารทั้งหมดด้วยเมธอด find()

> db.demo718.find();

ผลลัพธ์ที่ได้

{ "_id" : ObjectId("5eaae25843417811278f5880"), "id" : 101, "details" : { "OtherDetails" : [ "Chris", "Mike", "Sam" ], "GroupName" : [ "Group-1" ], "Info" : [ ] } }
{ "_id" : ObjectId("5eaae25943417811278f5881"), "id" : 102, "details" : { "OtherDetails" : [ "Chris", "David" ], "GroupName" : [ "Group-1" ], "Info" : [ ] } }

คำสั่งนับค่าที่ไม่ซ้ำกันทั่วทั้งเอกสาร

> db.demo718.aggregate([
    {
        $unwind: "$details.GroupName"
    },
    {
        $match: {
            "details.GroupName": "Group-1"
        }
    },
    {
        $unwind: "$details.OtherDetails"
    },
    {
        $group: {
            _id: "$details.GroupName",
            OtherDetailsUnique: {
                $addToSet: "$details.OtherDetails"
            }
        }
    },
    {
        $project: {
            _id : 0,
            GROUP_NAME: "$_id",
            OtherDetailsUniqueCount: {
                $size: "$OtherDetailsUnique"
            }
        }
    }
])

ผลลัพธ์ที่ได้

{ "GROUP_NAME" : "Group-1", "OtherDetailsUniqueCount" : 4 }