ใช้ $elemMatch ซ้อนกัน 2 ชั้น ร่วมกับ $in เพื่อค้นหาในอาร์เรย์ของอาร์เรย์
ตัวอย่างการใช้งาน
สร้างคอลเลกชัน arrayOfArraysDemo:
> db.arrayOfArraysDemo.insertOne({"EmployeeName":"Larry","EmployeeSkills":[["Java","MongoDB","MySQL","SQL Server"]]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f7a8d8d10a061296a3c5b") }
> db.arrayOfArraysDemo.insertOne({"EmployeeName":"Mike","EmployeeSkills":[["C","C++"]]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c7f7aa68d10a061296a3c5c") }
แสดงข้อมูล:
> db.arrayOfArraysDemo.find().pretty();
{"_id" : ObjectId("5c7f7a8d8d10a061296a3c5b"), "EmployeeName" : "Larry", "EmployeeSkills" : [ [ "Java", "MongoDB", "MySQL", "SQL Server" ] ] }
{"_id" : ObjectId("5c7f7aa68d10a061296a3c5c"), "EmployeeName" : "Mike", "EmployeeSkills" : [ [ "C", "C++" ] ] }
ค้นหาพนักงานที่มีทักษะ "MongoDB" ในอาร์เรย์ซ้อนกัน:
> db.arrayOfArraysDemo.find({'EmployeeSkills':{$elemMatch:{$elemMatch:{$in:['MongoDB']}}}}).pretty();
{"_id" : ObjectId("5c7f7a8d8d10a061296a3c5b"), "EmployeeName" : "Larry", "EmployeeSkills" : [ [ "Java", "MongoDB", "MySQL", "SQL Server" ] ] }
$elemMatch ชั้นนอกจับคู่อาร์เรย์ย่อย ชั้นในจับคู่สมาชิกภายในอาร์เรย์ย่อย