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

MongoDB, vícenásobný počet (s $exists)

Měli jste správnou základní myšlenku, ale $exists je podmínka dotazu, takže je platná pouze v $match . To, co chcete, je $ifNull operátora v podstatě udělat totéž:

db.mycollection.aggregate( [
    { "$group": {
        "_id" : { "user_id": "$user_id" },
        "requestA_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestA", false] }, 1, 0 ]
        } },
        "requestB_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestB", false] }, 1, 0 ]
        } },
        "requestC_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestC", false] }, 1, 0 ]
        } },
    } },
    { "$project": {
        "_id": 0,
        "user_id": "$_id.user_id",
        "requestA_count": 1,
        "requestB_count": 1,
        "requestC_count": 1
    } }
] );

Takže $ifNull buď vrátí současnou hodnotu pole, pokud existuje, nebo vrátí argument "pravá strana", pokud neexistuje. Vrácená hodnota jiná než false je interpretováno jako true (pokud ovšem hodnota není ve skutečnosti nepravdivá).

V podstatě vám to poskytuje stejnou funkcionalitu logického testování existence vlastnosti v dokumentu.




  1. Převod některých polí v Mongo z String na Array

  2. mongodb:dotaz find() v kolekci

  3. Jak mohu odstranit prvek vnořeného pole v dokumentu mongodb pomocí ovladače c#

  4. Upozornění:Nedefinovaná vlastnost:MongoDB\Driver\Manager::$mydb v [Cesta] na wamp serveru