สำหรับกรณีนี้ ให้ใช้ 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 }