วิธีค้นหารายการที่ซ้ำกันใน mongodb
คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อค้นหาเอกสารที่มีค่าซ้ำกันใน MongoDB:
db.collection.aggregate([ {" $group ": { "_id": " $field1 ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
นี่คือสิ่งที่ไวยากรณ์นี้ทำ:
- จัดกลุ่ม เอกสารทั้งหมดที่มีค่าเดียวกันในช่อง 1
- จับคู่ กลุ่มที่มีเอกสารมากกว่าหนึ่งฉบับ
- ฉาย กลุ่มทั้งหมดที่มีมากกว่าหนึ่งเอกสาร
แบบสอบถามนี้ค้นหาค่าที่ซ้ำกันในคอลัมน์ field1 เพียงแก้ไขค่านี้เพื่อเปลี่ยนฟิลด์ที่จะค้นหา
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้กับ ทีม คอลเลกชันที่มีเอกสารต่อไปนี้:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Rockets ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
ตัวอย่าง: ค้นหาเอกสารที่มีค่าซ้ำกัน
เราสามารถใช้โค้ดต่อไปนี้เพื่อค้นหาค่าที่ซ้ำกันทั้งหมดในคอลัมน์ “ทีม”:
db.teams.aggregate([ {" $group ": { "_id": " $team ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
แบบสอบถามนี้ส่งกลับผลลัพธ์ต่อไปนี้:
{ name: 'Rockets' } { name: 'Mavs' }
สิ่งนี้บอกเราว่าค่า “Rockets” และ “Mavs” ปรากฏหลายครั้งในช่อง “ทีม”
โปรดทราบว่าเราสามารถแทนที่ $team ด้วย $position เพื่อค้นหาค่าที่ซ้ำกันในช่อง “ตำแหน่ง” แทน:
db.teams.aggregate([ {" $group ": { "_id": " $position ", "count": { " $sum ": 1 } } }, {" $match ": {"_id" :{ " $ne " : null } , "count" : {" $gt ": 1} } }, {" $project ": {"name": " $_id ", "_id": 0} } ])
แบบสอบถามนี้ส่งกลับผลลัพธ์ต่อไปนี้:
{ name: 'Guard' }
สิ่งนี้บอกเราว่า “Guard” ปรากฏขึ้นหลายครั้งในช่อง “ตำแหน่ง”
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่นๆ ใน MongoDB:
MongoDB: วิธีเพิ่มฟิลด์ใหม่ให้กับคอลเลกชัน
MongoDB: วิธีจัดกลุ่มตามและนับ
MongoDB: วิธีจัดกลุ่มตามหลายฟิลด์