สำหรับสิ่งนี้ ให้ใช้การรวม MongoDB และภายในนั้น ให้ใช้ $cond $cond ประเมินนิพจน์บูลีนเพื่อส่งคืนหนึ่งในสองนิพจน์การส่งคืนที่ระบุ
ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo536.insertOne({"Name1":"Chris","Name2":"David"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8c843eef4dcbee04fbbc01") } > db.demo536.insertOne({"Name1":"David","Name2":"Chris"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8c843fef4dcbee04fbbc02") } > db.demo536.insertOne({"Name1":"Bob","Name2":"Sam"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8c843fef4dcbee04fbbc03") } > db.demo536.insertOne({"Name1":"Chris","Name2":"David"});{ "acknowledged" : true, "insertedId" : ObjectId("5e8c843fef4dcbee04fbbc04") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo536.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e8c843eef4dcbee04fbbc01"), "Name1" : "Chris", "Name2" : "David" } { "_id" : ObjectId("5e8c843fef4dcbee04fbbc02"), "Name1" : "David", "Name2" : "Chris" } { "_id" : ObjectId("5e8c843fef4dcbee04fbbc03"), "Name1" : "Bob", "Name2" : "Sam" } { "_id" : ObjectId("5e8c843fef4dcbee04fbbc04"), "Name1" : "Chris", "Name2" : "David" }
ต่อไปนี้เป็นแบบสอบถามเพื่อจัดกลุ่มที่มีหลายฟิลด์ -
> db.demo536.aggregate([ ... { ... $project: ... { ... FirstName1: ... { ... $cond: { if: { $gte: [ "$Name1", "$Name2" ] }, then: "$Name2", else: "$Name1" } ... }, ... FirstName2: ... { ... $cond: { if: { $lt: [ "$Name1", "$Name2" ] }, then: "$Name2", else: "$Name1" } ... } ... } ... } ... ,{ ... $group: ... { ... _id: ... { ... Name1: "$FirstName1", ... Name2: "$FirstName2" ... } ... ,count: { $sum: 1} ... } ... } ... ])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ &imnus;
{ "_id" : { "Name1" : "Bob", "Name2" : "Sam" }, "count" : 1 } { "_id" : { "Name1" : "Chris", "Name2" : "David" }, "count" : 3 }