ใช้ $all เพื่อค้นหาเอกสารที่ฟิลด์อาร์เรย์มีองค์ประกอบครบทุกตัวที่ระบุ โดยไม่สนใจลำดับ
ตัวอย่างข้อมูลทดสอบ
> db.demo370.insertOne({
"Name" : "Chris",
"details" : [
{"Subject" : "MySQL", "CountryName" : "US"},
{"Subject" : "MongoDB", "CountryName" : "UK"}
]
});
> db.demo370.insertOne({
"Name" : "David",
"details" : [
{"Subject" : "Java", "CountryName" : "AUS"},
{"Subject" : "Spring", "CountryName" : "UK"}
]
});
แสดงข้อมูลทั้งหมด
> 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"}
]
}
คิวรี่ค้นหา details ที่มีทั้งสองออบเจ็กต์ (ไม่สนใจลำดับ)
> db.demo370.find({
details: {$all: [
{Subject:"MySQL","CountryName" : "US"},
{Subject:"MongoDB", "CountryName" : "UK"}
]}
})
ผลลัพธ์ (ได้เฉพาะ Chris)
{
"_id" : ObjectId("5e57e9892ae06a1609a00af0"),
"Name" : "Chris",
"details" : [
{"Subject" : "MySQL", "CountryName" : "US"},
{"Subject" : "MongoDB", "CountryName" : "UK"}
]
}
หมายเหตุ: $all ต้องการให้อาร์เรย์มีองค์ประกอบ ทุกตัว ที่ระบุ (match ทั้งออบเจ็กต์) ไม่ใช่แค่บางส่วน