ใช้โอเปอเรเตอร์ $elemMatch เพื่อค้นหาเอกสารที่อาร์เรย์ของออบเจ็กต์มีสมาชิกตรงตามเงื่อนไขหลายฟิลด์พร้อมกัน
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน searchArrayDemo พร้อมข้อมูลพนักงานและประวัติการทำงาน:
> 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") }
แสดงข้อมูลทั้งหมด:
> 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} ] }
กรณี 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();
ไม่มีผลลัพธ์คืนมา