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

เปรียบเทียบแอตทริบิวต์ของออบเจ็กต์ต่างกันในอาร์เรย์ MongoDB

ใช้ $expr ร่วมกับ $let, $indexOfArray, $arrayElemAt เพื่อดึงออบเจ็กต์เฉพาะในอาร์เรย์มาเปรียบเทียบค่า

ตัวอย่างข้อมูลทดสอบ

> db.demo366.insertOne({
    "Name" : "Chris",
    "details" : [
        {"Id" : "John1", "value" : "test"},
        {"Id" : "John2", "value" : 18},
        {"Id" : "John3", "value" : 20}
    ]
});

แสดงข้อมูล

> db.demo366.find();
{
    "_id" : ObjectId("5e57ddd92ae06a1609a00ae7"),
    "Name" : "Chris",
    "details" : [
        {"Id" : "John1", "value" : "test"},
        {"Id" : "John2", "value" : 18},
        {"Id" : "John3", "value" : 20}
    ]
}

คิวรี่เปรียบเทียบ value ของ John2 และ John3 (John2 < John3)

> db.demo366.find({
    "$expr":{
        "$let":{
            "vars":{
                "john2":{"$arrayElemAt":["$details",{"$indexOfArray":["$details.Id","John2"]}]},
                "john3":{"$arrayElemAt":["$details",{"$indexOfArray":["$details.Id","John3"]}]}
            },
            "in":{"$lt":["$$john2.value","$$john3.value"]}
        }
    }
})

ผลลัพธ์

{
    "_id" : ObjectId("5e57ddd92ae06a1609a00ae7"),
    "Name" : "Chris",
    "details" : [
        {"Id" : "John1", "value" : "test"},
        {"Id" : "John2", "value" : 18},
        {"Id" : "John3", "value" : 20}
    ]
}

คำอธิบาย:

  1. $indexOfArray หาตำแหน่งของออบเจ็กต์ที่ Id = "John2" และ "John3"
  2. $arrayElemAt ดึงออบเจ็กต์ทั้งตัว ณ ตำแหน่งนั้น
  3. $let กำหนดตัวแปรชั่วคราว john2, john3
  4. $lt เปรียบเทียบ $$john2.value < $$john3.value (18 < 20 = true)