Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

คิวรี่ MongoDB ค้นหาเอกสารที่อาร์เรย์ตรงกันทุกองค์ประกอบ (ไม่สนใจลำดับ)

ใช้ $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 ทั้งออบเจ็กต์) ไม่ใช่แค่บางส่วน