คุณสามารถใช้ตัวดำเนินการ $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" }}