sql >> Databáze >  >> NoSQL >> MongoDB

Seskupit podle stavu v MongoDB

Agregační rámec je to, co chcete:

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

Nejprve tedy seskupíte den pomocí operátorů agregace data a získáte celkový počet položek v daný den. Použití $cond operátor zde určuje, zda je "stav" skutečně vadou nebo ne a výsledkem je podmíněný $sum kde se počítají pouze hodnoty "vady".

Jakmile jsou seskupeny za den, jednoduše $divide výsledek s další kontrolou pomocí $cond abyste se ujistili, že nedělíte nulou.



  1. MongoDB $asinh

  2. Existuje nějaký způsob, jak pracovat s relacemi bez zamykání na webu ASP.Net MVC?

  3. Agregace MongoDB:Počítání různých polí

  4. Jak se připojím k mongodb pomocí node.js (a ověřím)?