Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ดึงค่าอาร์เรย์ใน MongoDB ด้วย $elemMatch

ใช้ 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: