MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Agregat dengan jumlah sub dokumen yang sesuai dengan kondisi dan pengelompokannya

Anda seharusnya membaca jawabannya dengan benar, karena sudah ada daftar alternatif lain dan penjelasan mengapa hasil yang Anda inginkan dari yang Anda gunakan akan berbeda.

Alih-alih, Anda menginginkan yang ini, yang menghormati kemungkinan beberapa "LULUS" atau "GAGAL":

  Model.aggregate(
    [
      { "$sort": { "executionProject": 1, "runEndTime": 1 } },
      { "$group": {
        "_id": "$executionProject",
        "suiteList": { "$last": "$suiteList" },
        "runEndTime": { "$last": "$runEndTime" }
      }},
      { "$unwind": "$suiteList" },
      { "$group": {
        "_id": "$_id",
        "suite-pass": { 
          "$sum": {
            "$cond": [
              { "$eq": [ "$suiteList.suiteStatus", "PASS" ] },
              1,
              0
            ]
          }
        },
        "suite-fail": { 
          "$sum": {
            "$cond": [
              { "$eq": [ "$suiteList.suiteStatus", "FAIL" ] },
              1,
              0
            ]
          }
        },
        "runEndTime": {"$first": "$runEndTime"}
      }},
      { "$sort": { "runEndTime": 1 }}
    ],
    function(err,result) {

    }
  );

Yang merupakan semacam "kombinasi" pendekatan. Yang pertama adalah mendapatkan "terakhir" oleh runTime seperti yang Anda harapkan. Berikutnya adalah memecah array dan kali ini benar-benar "menjumlahkan" kemungkinan terjadinya lulus atau gagal, daripada hanya merekam 1 untuk lulus atau gagal dalam larik, "lulus" atau "gagal" yang sebenarnya akan dihitung.

Dengan hasil:

{
        "_id" : "Project1",
        "suite-pass" : 0,
        "suite-fail" : 1,
        "runEndTime" : ISODate("2015-08-19T09:46:31.108Z")
}
{
        "_id" : "Project2",
        "suite-pass" : 2,
        "suite-fail" : 0,
        "runEndTime" : ISODate("2015-08-19T11:09:52.537Z")
}
{
        "_id" : "Project3",
        "suite-pass" : 0,
        "suite-fail" : 1,
        "runEndTime" : ISODate("2015-08-19T11:18:41.460Z")
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Migrasi ke MongoDB:cara menanyakan GROUP BY + WHERE

  2. MongoDB/PyMongo:bagaimana cara 'melarikan diri' dari parameter dalam pencarian regex?

  3. Ambil beberapa elemen yang ditanyakan dalam array objek di koleksi MongoDB

  4. Cara menggunakan findOne luwak

  5. Bagaimana cara saya hanya mengembalikan BEBERAPA bidang ($ proyek) dari agregasi Mongodb, sementara juga menggunakan $match, $lookup DAN $filter