สร้างคอลเลกชันตัวอย่าง
> db.demo149.insertOne({"Status":40});
{ "acknowledged": true, "insertedId": ObjectId("5e350386fdf09dd6d08539c4") }
> db.demo149.insertOne({"Status":40});
{ "acknowledged": true, "insertedId": ObjectId("5e350388fdf09dd6d08539c5") }
> db.demo149.insertOne({"Status":50});
{ "acknowledged": true, "insertedId": ObjectId("5e35038afdf09dd6d08539c6") }
แสดงข้อมูล
> db.demo149.find();
{ "_id": ObjectId("5e350386fdf09dd6d08539c4"), "Status": 40 }
{ "_id": ObjectId("5e350388fdf09dd6d08539c5"), "Status": 40 }
{ "_id": ObjectId("5e35038afdf09dd6d08539c6"), "Status": 50 }
คิวรี Aggregate: $group + $cond + $push + $setDifference
จัดกลุ่มแยก Status=40 (done) และ Status=50 (notdone) แล้วลบ false ออก:
> db.demo149.aggregate([
{
"$group": {
"_id": null,
"done": {
"$push": {
"$cond": [
{ "$eq": ["$Status", 40] },
{ "_id": "$_id", "Status": "$Status" },
false
]
}
},
"notdone": {
"$push": {
"$cond": [
{ "$eq": ["$Status", 50] },
{ "_id": "$_id", "Status": "$Status" },
false
]
}
}
}
},
{
"$project": {
"_id": 0,
"done": { "$setDifference": ["$done", [false]] },
"notdone": { "$setDifference": ["$notdone", [false]] }
}
}
]);
ผลลัพธ์: แยก Done (Status 40) และ Not Done (Status 50)
{ "done": [ { "_id": ObjectId("5e350386fdf09dd6d08539c4"), "Status": 40 }, { "_id": ObjectId("5e350388fdf09dd6d08539c5"), "Status": 40 } ], "notdone": [ { "_id": ObjectId("5e35038afdf09dd6d08539c6"), "Status": 50 } ] }