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.Subjectstự độ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
$filterhoặc$elemMatchprojection