Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Truy vấn lấy giá trị mảng lồng nhau trong MongoDB

Sử dụng find() kết hợp $elemMatch để truy vấn giá trị trong mảng lồng nhau sâu.

Tạo collection với cấu trúc mảng lồng nhau phức tạp (StudentDetails > Favourite > Teacher/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") }

Hiển thị dữ liệu đầy đủ:

> db.fetchingArrayValuesDemo.find();
{ "_id" : ObjectId("5e06fc3425ddae1f53b621fa"), "StudentName" : "David", "StudentDetails" : [ { "FatherName" : "Bob", "CountryName" : "US", "Favourite" : [ { "Teacher" : "DAVID", "Subject" : [ "MySQL", "MongoDB", "Java" ], "Marks" : [ 50, 60, 65 ] } ] } ] }
{ "_id" : ObjectId("5e06fc6825ddae1f53b621fb"), "StudentName" : "Robert", "StudentDetails" : [ { "FatherName" : "Sam", "CountryName" : "AUS", "Favourite" : [ { "Teacher" : "MIKE", "Subject" : [ "Python", "C", "C++" ], "Marks" : [ 76, 89, 91 ] } ] } ] }

Truy vấn lồng $elemMatch để tìm Teacher="DAVID":

> db.fetchingArrayValuesDemo.find({
...   StudentDetails: {
...     $elemMatch: {
...       Favourite: {
...         $elemMatch: {
...           Teacher: "DAVID"
...         }
...       }
...     }
...   }
... });

Kết quả trả về tài liệu của David:

{ "_id" : ObjectId("5e06fc3425ddae1f53b621fa"), "StudentName" : "David", "StudentDetails" : [ { "FatherName" : "Bob", "CountryName" : "US", "Favourite" : [ { "Teacher" : "DAVID", "Subject" : [ "MySQL", "MongoDB", "Java" ], "Marks" : [ 50, 60, 65 ] } ] } ] }