ใน 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" ผลลัพธ์คืออาร์เรย์ที่สะท้อนสถานะของแต่ละเอกสารในกลุ่ม