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

จัดกลุ่มด้วยหลายฟิลด์และรับจำนวนค่าฟิลด์ที่ซ้ำกันจัดกลุ่มเข้าด้วยกันใน MongoDB


สำหรับสิ่งนี้ ให้ใช้การรวม 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 }