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

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


สำหรับเรื่องนี้ ให้ใช้ MongoDB aggregate และภายในนั้นใช้ $cond $cond จะประเมินนิพจน์ boolean เพื่อคืนค่าหนึ่งในสองนิพจน์ที่ระบุ มาสร้างคอลเลกชันพร้อมเอกสารกันก่อน

> 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} ...    } ... } ... ])

จะได้ผลลัพธ์ดังนี้

{ "_id" : { "Name1" : "Bob", "Name2" : "Sam" }, "count" : 1 } { "_id" : { "Name1" : "Chris", "Name2" : "David" }, "count" : 3 }