sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB, multiple count (med $eksisterer)

Du havde den rigtige grundlæggende idé, men $exists er en forespørgselsbetingelse, så den er kun gyldig i en $match . Det, du ønsker, er $ifNull operatør til i det væsentlige at gøre det samme:

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

$ifNull enten returnerer den nuværende værdi af feltet, hvis det findes, eller "højre side"-argumentet returneres, hvis det ikke gør det. Den returnerede værdi ud over false tolkes som værende sand (medmindre værdien selvfølgelig er falsk).

Dette giver dig i bund og grund den samme funktionalitet til logisk at teste for eksistensen af ​​en egenskab i dokumentet.




  1. MongoDB dropIndex()

  2. Mongoid - forespørgsel efter refereret dokument

  3. mongoengine +django hvordan man tæller antallet af elementer med samme indhold

  4. Bluemix Mongodb :Kunne ikke godkendes