ในการค้นหาอาร์เรย์ของวัตถุใน 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(); ที่นี่คุณจะไม่ได้รับอะไรเลยเมื่อไม่พบองค์ประกอบที่กำหนด