สำหรับสิ่งนี้ ให้ใช้ aggregate() ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -
> db.demo393.insertOne(... {... Id1:"1",... Name:"Chris",... Id2:"100"... }... );{ "acknowledged" :จริง "insertedId" :ObjectId("5e5e6dd522064be7ab44e804")}> db.demo393.insertOne(... {... Id1:"1",... ชื่อ:"Chris",... Id2 :"101"... }... );{ "รับทราบ" :จริง "insertedId" :ObjectId("5e5e6dd522064be7ab44e805")}> db.demo393.insertOne(... {... Id1:"3" ,... ชื่อ:"คริส",... Id2:"100"... }... );{ "acknowledged" :true, "insertedId" :ObjectId("5e5e6dd522064be7ab44e806")}> db.demo393. insertOne(... {... Id1:"3",... ชื่อ:"Mike",... Id2:"101"... }... );{ "acknowledged" :true, "insertedId" " :ObjectId("5e5e6dd522064be7ab44e807")}
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo393.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" :ObjectId("5e5e6dd522064be7ab44e804"), "Id1" :"1", "Name" :"Chris", "Id2" :"100" }{ "_id" :ObjectId("5e5e6dd522064be7ab44e805") , "Id1" :"1", "Name" :"Chris", "Id2" :"101" }{ "_id" :ObjectId("5e5e6dd522064be7ab44e806"), "Id1" :"3", "Name" :" Chris", "Id2" :"100" }{ "_id" :ObjectId("5e5e6dd522064be7ab44e807"), "Id1" :"3", "Name" :"Mike", "Id2" :"101" }
ต่อไปนี้เป็นแบบสอบถามเพื่อจับคู่จุดตัดของเอกสารกับเขตข้อมูลร่วมกัน -
> db.demo393.aggregate([... { "$match":{ "Name":"Chris" } },... { "$group":{... "_id":"$ Id1",... "docs":{ "$push":"$$ROOT" },... "count":{ "$sum":1 }... }},... { "$ ตรงกัน":{... "นับ":{ "$gt":1 },... "เอกสาร":{... "$all":[... { "$elemMatch":{ "Id2" :"100" } },... { "$elemMatch":{ "Id2":"101" } }... ]... }... }}... ])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" :"1", "docs" :[ { "_id" :ObjectId("5e5e6dd522064be7ab44e804"), "Id1" :"1", "Name" :"Chris", "Id2" :" 100" }, { "_id" :ObjectId("5e5e6dd522064be7ab44e805"), "Id1" :"1", "Name" :"Chris", "Id2" :"101" } ], "นับ" :2 }ก่อน>