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

Lấy mảng chuỗi lồng nhau trong MongoDB với dot notation

Dot notation trong find() cho phép truy vấn trực tiếp vào mảng lồng sâu (nested array) mà không cần aggregate.

Dữ liệu mẫu

> db.demo89.insertOne({
    id: 101, 
    Details: [ 
        { Name: "Chris", Marks: 45 }, 
        { Name: "David", Marks: 55, Subjects : ["MySQL", "MongoDB", "Java", "C"] } 
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c163b79799acab037af51") }
> db.demo89.insertOne({
    id: 102, 
    Details: [ 
        { Name: "Mike", Marks: 48 }, 
        { Name: "Bob", Marks: 98, Subjects : ["C++", "MySQL"] } 
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c163c79799acab037af52") }

Truy vấn dot notation

Tìm document có Subjects chứa "MongoDB" (bất kể ở phần tử nào của Details):

> db.demo89.find({ "Details.Subjects": "MongoDB" });

Kết quả

{ "_id" : ObjectId("5e2c163b79799acab037af51"), "id" : 101, "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "David", "Marks" : 55, "Subjects" : [ "MySQL", "MongoDB", "Java", "C" ] } ] }

Đặc điểm:

  • Details.Subjects tự động "flatten" - kiểm tra tất cả mảng Subjects trong mọi phần tử của Details
  • Trả về toàn bộ document (không chỉ phần tử khớp)
  • Đơn giản, hiệu quả cho trường hợp lọc document
  • Nếu cần lấy chỉ phần tử khớp, dùng aggregate với $filter hoặc $elemMatch projection