MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Групиране по условие в MongoDB

Рамката за агрегиране е това, което искате:

db.collection.aggregate([
    { "$group": {
        "_id": {
            "year": { "$year": "$utc_timestamp" },
            "month": { "$month": "$utc_timestamp" },
            "day": { "$dayOfMonth": "$utc_timestamp" },
        },
        "defects": {
            "$sum": { "$cond": [
                { "$eq": [ "$status", "defect" ] },
                1,
                0
            ]}
        },
        "totalCount": { "$sum": 1 }
    }},
    { "$project": {
        "defect_rate": {
            "$cond": [
                { "$eq": [ "$defects", 0 ] },
                0,
                { "$divide": [ "$defects", "$totalCount" ] }
            ]
        }
    }}
])

Така че първо групирате в деня, като използвате операторите за агрегиране на дати и получавате общия брой елементи за дадения ден. Използването на $cond операторът тук определя дали "статусът" всъщност е дефект или не и резултатът е условно $sum където се отчитат само стойностите на "дефекта".

След като те бъдат групирани на ден, просто $divide резултата с друга проверка с $cond за да сте сигурни, че не делите на нула.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Филтър с редовен израз MongoDB C# драйвер

  2. Групирайте и пребройте с условие

  3. Как да експортирам/изхвърлям базата данни mongodb?

  4. Mongoose - Запазване на масив от низове

  5. Кога да Redis? Кога да MongoDB?