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

แบบสอบถาม MongoDB เพื่อจับคู่จุดตัดของเอกสารกับเขตข้อมูลร่วมกัน


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