sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB, multipelräkning (med $exists)

Du hade rätt grundidé men $exists är ett frågevillkor så det är endast giltigt inom en $match . Det du vill ha är $ifNull operatören att göra samma sak:

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 antingen returnerar fältets nuvärde om det finns eller så returneras argumentet "höger sida" om det inte gör det. Det returnerade värdet annat än false tolkas som sant (såvida inte värdet faktiskt är falskt).

Detta ger dig i huvudsak samma funktionalitet för att logiskt testa om det finns en egenskap i dokumentet.




  1. Stora dataarbetsflöden med pandor

  2. Rekursiva element i Schema:Mongoose modellering

  3. Hur vet man master/slav status för redis?

  4. findAndModify misslyckas med fel:Kan inte uppdatera 'field1' och 'field1' samtidigt