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

การใช้ $push กับนิพจน์คำนวณใน $group ของ MongoDB Aggregation

ใน MongoDB Aggregation สามารถใช้ $push ร่วมกับ $cond เพื่อสร้างอาร์เรย์จากนิพจน์เงื่อนไขภายใน $group

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

> db.demo24.insertOne({"Id":100,"Status":true});
> db.demo24.insertOne({"Id":100,"Status":true});
> db.demo24.insertOne({"Id":100,"Status":false});
> db.demo24.insertOne({"Id":100,"Status":true});
> db.demo24.insertOne({"Id":100,"Status":false});

แสดงข้อมูลทั้งหมด

> db.demo24.find();
{
    "_id" : ObjectId("5e14c58722d07d3b95082e72"),
    "Id" : 100, "Status" : true
}
{
    "_id" : ObjectId("5e14c58a22d07d3b95082e73"),
    "Id" : 100, "Status" : true
}
{
    "_id" : ObjectId("5e14c58f22d07d3b95082e74"),
    "Id" : 100, "Status" : false
}
{
    "_id" : ObjectId("5e14c59122d07d3b95082e75"),
    "Id" : 100, "Status" : true
}
{
    "_id" : ObjectId("5e14c59222d07d3b95082e76"),
    "Id" : 100, "Status" : false
}

คำสั่ง Aggregation พร้อม $push และ $cond

> db.demo24.aggregate({
    $group: {
        _id: '$Id',
        AllValues: {
            $push: {
                $cond: [
                    {$eq: ['$Status', true]},
                    'Active',
                    'InActive'
                ]
            }
        }
    }
})

ผลลัพธ์

{
    "_id" : 100,
    "AllValues" : [
        "Active", "Active", "InActive", "Active", "InActive"
    ]
}

คำอธิบาย: $cond ตรวจสอบว่า Status เป็น true หรือไม่ ถ้าใช่ ให้ push "Active" มิฉะนั้น push "InActive" ผลลัพธ์คืออาร์เรย์ที่สะท้อนสถานะของแต่ละเอกสารในกลุ่ม