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

แบบสอบถาม MongoDB พร้อมฟิลด์ในเอกสารเดียวกันหรือไม่


คุณสามารถใช้ตัวดำเนินการ $where สำหรับสิ่งนี้ เพื่อให้เข้าใจแนวคิด ให้เราสร้างคอลเลกชันพร้อมกับเอกสาร แบบสอบถามเพื่อสร้างคอลเลกชันที่มีเอกสารมีดังนี้ -

> db.queryInSameDocumentsDemo.insertOne({"StudentDetails":{"StudentName":"John"},"NewStudentDetails":{"StudentName":"Carol"}});{ "acknowledged" :true, "insertedId" " :ObjectId("5c90096ed3c9d04998abf017")}> db.queryInSameDocumentsDemo.insertOne({"StudentDetails":{"StudentName":"Bob"},"NewStudentDetails":{"StudentName":"Bob"}});{ "รับทราบแล้ว " :จริง "insertedId" :ObjectId("5c900a435705caea966c5573")}

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้เมธอด find() แบบสอบถามมีดังนี้ −

> db.queryInSameDocumentsDemo.find().pretty();

ต่อไปนี้เป็นผลลัพธ์ -

{ "_id" :ObjectId("5c90096ed3c9d04998abf017"), "StudentDetails" :{ "StudentName" :"John" }, "NewStudentDetails" :{ "StudentName" :"Carol" }}{ "_id" :ObjectId( "5c900a435705caea966c5573"), "StudentDetails" :{ "StudentName" :"Bob" }, "NewStudentDetails" :{ "StudentName" :"Bob" }}

กรณีที่ 1 − นี่คือแบบสอบถามที่มีเขตข้อมูลในเอกสารเดียวกัน เราใช้ตัวดำเนินการความเท่าเทียมกัน (==) ที่นี่ แบบสอบถามมีดังนี้ −

<ก่อนหน้า>> db.queryInSameDocumentsDemo.find( { $where:"this.StudentDetails.StudentName ==this.NewStudentDetails.StudentName" } ).pretty();

ต่อไปนี้เป็นผลลัพธ์ -

{ "_id" :ObjectId("5c900a435705caea966c5573"), "StudentDetails" :{ "StudentName" :"Bob" } "NewStudentDetails" :{ "StudentName" :"Bob" }}

กรณีที่ 2 − นี่คือแบบสอบถามที่มีเขตข้อมูลในเอกสารเดียวกัน เราใช้ไม่เท่ากับโอเปอเรเตอร์

แบบสอบถามมีดังนี้ −

> db.queryInSameDocumentsDemo.find( { $where:"this.StudentDetails.StudentName !=this.NewStudentDetails.StudentName" } ).pretty();

ต่อไปนี้เป็นผลลัพธ์ -

{ "_id" :ObjectId("5c90096ed3c9d04998abf017"), "StudentDetails" :{ "StudentName" :"John" }, "NewStudentDetails" :{ "StudentName" :"Carol" }}