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

MongoDB Aggregate: จัดกลุ่มสถานะ (GroupBy) แยก Done/Not Done


สร้างคอลเลกชันตัวอย่าง

> 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 } ] }