ในการค้นหาอาร์เรย์ของวัตถุใน MongoDB คุณสามารถใช้ตัวดำเนินการ $elemMatch โอเปอเรเตอร์นี้ช่วยให้เราค้นหาองค์ประกอบได้มากกว่าหนึ่งองค์ประกอบจากวัตถุอาร์เรย์
เพื่อให้เข้าใจแนวคิดข้างต้น ให้เราสร้างคอลเลกชันพร้อมกับเอกสาร แบบสอบถามเพื่อสร้างคอลเลกชันที่มีเอกสารมีดังนี้ -
> db.searchArrayDemo.insertOne({"EmployeeFirstName":"Adam","EmployeeLastName":"Smith","EmployeeDateOfBirth":new ISODate("1992-01-31 13:45:10"), ... "EmployeeSkills":["Spring and Hibernate Framework","Machine Learning"], ... "EmployeeDetails":[ ... { ... "EmployeePerformanceArea":"Java", ... "Year":2001 ... }, ... { ... "EmployeePerformanceArea":"Python", ... "Year":2005 ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5c77b3812386c62d05142a6a") } > db.searchArrayDemo.insertOne({"EmployeeFirstName":"Carol","EmployeeLastName":"Taylor", "EmployeeDateOfBirth":new ISODate("1993-04-21 11:10:20"), "EmployeeSkills":["C++","Cloud Computing"], "EmployeeDetails":[ { "EmployeePerformanceArea":"C++", "Year":1998 }, { "EmployeePerformanceArea":"C++ Game Developer", "Year":2007 } ] } ); { "acknowledged" : true, "insertedId" : ObjectId("5c77b58f2386c62d05142a6b") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้เมธอด find() แบบสอบถามมีดังนี้ −
> db.searchArrayDemo.find().pretty();
ต่อไปนี้เป็นผลลัพธ์ -
{ "_id" : ObjectId("5c77b3812386c62d05142a6a"), "EmployeeFirstName" : "Adam", "EmployeeLastName" : "Smith", "EmployeeDateOfBirth" : ISODate("1992-01-31T13:45:10Z"), "EmployeeSkills" : [ "Spring and Hibernate Framework", "Machine Learning" ], "EmployeeDetails" : [ { "EmployeePerformanceArea" : "Java", "Year" : 2001 }, { "EmployeePerformanceArea" : "Python", "Year" : 2005 } ] } { "_id" : ObjectId("5c77b58f2386c62d05142a6b"), "EmployeeFirstName" : "Carol", "EmployeeLastName" : "Taylor", "EmployeeDateOfBirth" : ISODate("1993-04-21T11:10:20Z"), "EmployeeSkills" : [ "C++", "Cloud Computing" ], "EmployeeDetails" : [ { "EmployeePerformanceArea" : "C++", "Year" : 1998 }, { "EmployeePerformanceArea" : "C++ Game Developer", "Year" : 2007 } ] }
นี่คือแบบสอบถามเพื่อค้นหาในอาร์เรย์ของวัตถุใน MongoDB
กรณีที่ 1
เมื่อพบองค์ประกอบที่กำหนด
แบบสอบถามมีดังนี้ −
> db.searchArrayDemo.find({EmployeeDetails:{$elemMatch:{EmployeePerformanceArea : "C++", Year : 1998}}}).pretty();
ต่อไปนี้เป็นผลลัพธ์ -
{ "_id" : ObjectId("5c77b58f2386c62d05142a6b"), "EmployeeFirstName" : "Carol", "EmployeeLastName" : "Taylor", "EmployeeDateOfBirth" : ISODate("1993-04-21T11:10:20Z"), "EmployeeSkills" : [ "C++", "Cloud Computing" ], "EmployeeDetails" : [ { "EmployeePerformanceArea" : "C++", "Year" : 1998 }, { "EmployeePerformanceArea" : "C++ Game Developer", "Year" : 2007 } ] }
กรณีที่ 2
เมื่อไม่พบองค์ประกอบที่กำหนด
แบบสอบถามมีดังนี้ −
> db.searchArrayDemo.find({EmployeeDetails:{$elemMatch:{EmployeePerformanceArea : "C", Year : 1996}}}).pretty();
ที่นี่คุณจะไม่ได้รับอะไรเลยเมื่อไม่พบองค์ประกอบที่กำหนด