Toán tử $all chọn tài liệu mà trường mảng chứa tất cả các phần tử chỉ định, bất kể thứ tự.
Tạo collection với mảng đối tượng:
> db.demo370.insertOne({
"Name" : "Chris",
"details" : [
{ "Subject" : "MySQL", "CountryName" : "US" },
{ "Subject" : "MongoDB", "CountryName" : "UK" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9892ae06a1609a00af0") }
> db.demo370.insertOne({
"Name" : "David",
"details" : [
{ "Subject" : "Java", "CountryName" : "AUS" },
{ "Subject" : "Spring", "CountryName" : "UK" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9972ae06a1609a00af1") }
Xem dữ liệu:
> db.demo370.find();
{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }
{ "_id" : ObjectId("5e57e9972ae06a1609a00af1"), "Name" : "David", "details" : [ { "Subject" : "Java", "CountryName" : "AUS" }, { "Subject" : "Spring", "CountryName" : "UK" } ] }
Tìm tài liệu có mảng details chứa CẢ HAI đối tượng chỉ định (thứ tự không quan trọng):
> db.demo370.find({
details: {$all: [
{Subject:"MySQL","CountryName" : "US"},
{Subject:"MongoDB", "CountryName" : "UK"}
]}})
Kết quả (chỉ Chris):
{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }
Điểm quan trọng: $all với đối tượng yêu cầu khớp chính xác toàn bộ đối tượng (tất cả cặp key-value). Nếu chỉ muốn khớp một số trường, hãy dùng $elemMatch kết hợp $all hoặc aggregation.