ใช้ find() ร่วมกับ $elemMatch เพื่อดึงค่าอาร์เรย์ที่ตรงเงื่อนไขเฉพาะ
สร้างคอลเลกชันพร้อมเอกสารที่มีโครงสร้างซ้อนหลายชั้น (StudentDetails > Favourite > Subject/Marks):
> db.fetchingArrayValuesDemo.insertOne(
... {
... "StudentName": "David",
... "StudentDetails": [
... {
... "FatherName": "Bob",
... "CountryName": "US",
... "Favourite": [
... {
... "Teacher": "DAVID",
... "Subject": [ "MySQL", "MongoDB", "Java" ],
... "Marks": [ 50, 60, 65 ]
... }
... ]
... }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e06fc3425ddae1f53b621fa") }
> db.fetchingArrayValuesDemo.insertOne(
... {
... "StudentName": "Robert",
... "StudentDetails": [
... {
... "FatherName": "Sam",
... "CountryName": "AUS",
... "Favourite": [
... {
... "Teacher": "MIKE",
... "Subject": [ "Python", "C", "C++" ],
... "Marks": [ 76, 89, 91 ]
... }
... ]
... }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e06fc6825ddae1f53b621fb") }
แสดงเอกสารทั้งหมด:
> db.fetchingArrayValuesDemo.find();
ผลลัพธ์ - โครงสร้างซ้อน 3 ระดับ (StudentDetails > Favourite > Subject/Marks):
คำสั่งค้นหาเอกสารที่มี Teacher = "DAVID" ในอาร์เรย์ Favourite (ใช้ $elemMatch ซ้อน 2 ชั้น):
> db.fetchingArrayValuesDemo.find({ ... StudentDetails:{ ... $elemMatch: { ... Favourite: { ... $elemMatch: { ... Teacher: "DAVID" ... } ... } ... } ... } ... });ผลลัพธ์ - ได้เฉพาะเอกสารของ David ที่มี Teacher = DAVID: