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

ทำ Distinct หลายฟิลด์ (Multiple Keys) ใน MongoDB อย่างมีประสิทธิภาพ

ใช้ Aggregate Framework พร้อม $group โดยระบุ _id เป็นออบเจ็กต์ที่มีหลายฟิลด์ เพื่อทำ distinct หลายคีย์พร้อมกัน

ตัวอย่างการใช้งาน

สร้างคอลเลกชัน distinctWithMultipleKeysDemo:

> db.distinctWithMultipleKeysDemo.insertOne({"StudentName":"Mike","StudentAge":22,"StudentMathMarks":56});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f74488d10a061296a3c53") }
> db.distinctWithMultipleKeysDemo.insertOne({"StudentName":"Mike","StudentAge":22,"StudentMathMarks":56});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f744b8d10a061296a3c54") }
> db.distinctWithMultipleKeysDemo.insertOne({"StudentName":"Bob","StudentAge":23,"StudentMathMarks":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f74598d10a061296a3c55") }
> db.distinctWithMultipleKeysDemo.insertOne({"StudentName":"Bob","StudentAge":23,"StudentMathMarks":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f745e8d10a061296a3c56") }
> db.distinctWithMultipleKeysDemo.insertOne({"StudentName":"Carol","StudentAge":27,"StudentMathMarks":54});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f74688d10a061296a3c57") }

แสดงข้อมูล (มีข้อมูลซ้ำ):

> db.distinctWithMultipleKeysDemo.find().pretty();
{"_id" : ObjectId("5c7f74488d10a061296a3c53"), "StudentName" : "Mike", "StudentAge" : 22, "StudentMathMarks" : 56 }
{"_id" : ObjectId("5c7f744b8d10a061296a3c54"), "StudentName" : "Mike", "StudentAge" : 22, "StudentMathMarks" : 56 }
{"_id" : ObjectId("5c7f74598d10a061296a3c55"), "StudentName" : "Bob", "StudentAge" : 23, "StudentMathMarks" : 45 }
{"_id" : ObjectId("5c7f745e8d10a061296a3c56"), "StudentName" : "Bob", "StudentAge" : 23, "StudentMathMarks" : 45 }
{"_id" : ObjectId("5c7f74688d10a061296a3c57"), "StudentName" : "Carol", "StudentAge" : 27, "StudentMathMarks" : 54 }

คำสั่ง Aggregate distinct ตาม StudentName และ StudentAge:

> c = db.distinctWithMultipleKeysDemo;
test.distinctWithMultipleKeysDemo
> myResult = c.aggregate( [ {"$group": { "_id": { StudentName:"$StudentName", StudentAge: "$StudentAge" } } } ] );
{"_id" : {"StudentName" : "Carol", "StudentAge" : 27} }
{"_id" : {"StudentName" : "Bob", "StudentAge" : 23} }
{"_id" : {"StudentName" : "Mike", "StudentAge" : 22} }

ได้ค่าที่ไม่ซ้ำกันของคู่ (StudentName, StudentAge) ทั้งหมด 3 คู่