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

Mohu požádat o každý souhrnný dotaz v MongoDB?

S agregačním kanálem to udělat nemůžete. Měli byste pochopit, že agregace MongoDB je řada speciálních operátorů aplikovaných na kolekci. Když spustíte agregační kanál, MongoDB spojí operátory do sebe, tj. výstup operátora se stane vstupem následujícího operátoru. Výsledkem každého operátora je nová sbírka dokumentů.

To, čeho se ve výše uvedeném snažíte dosáhnout, lze tedy jednoduše přepsat jako následující kanál, aniž by bylo nutné nejprve vytvořit pole dokumentů:

var collection = db.collection('member'), 
    pipeline = [
        { "$match": { createdDate: currentDate, country: 'BD' } },
        {
            "$group": {
                "_id": { "memberType": "$memberType", "country": "$country" },
                "memberCount": { 
                    "$sum": { "$cond":[ { "$gt": ["$numberOfInvitees", 0] }, 1, 0 ] } 
                },
                "sameCount": { "$sum": 1 } 
            }
        }
    ];

collection.aggregate(pipeline, function(err, result){
    if (err) throw err;
    console.log(result);
});

AKTUALIZACE

V návaznosti na změny ve vaší otázce spuštěním následujícího agregačního kanálu získáte požadovaný výsledek:

var collection = db.collection('member'), 
    pipeline = [   
        { "$match": { createdDate: currentDate, country: 'BD' } },
        {
            "$group": {
                "_id": { 
                    "memberType": "$memberType", 
                    "country": "$country" 
                },            
                "invitees":{ 
                    "$push":  {
                        "memberID": "$memberID",
                        "count": "$numberOfInvitees"
                    }
                },
                "inviteesList": { "$push": "$numberOfInvitees" },
                "memberCount": { "$sum": 1 } 
            }
        },
        { "$unwind": "$invitees" },
        { "$unwind": "$inviteesList" },
        { 
            "$group": {
                "_id": "$invitees.memberID",
                "sameInviteesCount": { 
                     "$sum": { 
                        "$cond": [ 
                            { "$eq": ["$inviteesList", "$invitees.count"] }, 
                            1, 0 
                        ] 
                    }
                },
                "lessInviteesCount": { 
                    "$sum": { 
                        "$cond":[ 
                            { "$lt": ["$inviteesList", "$invitees.count"] }, 
                            1, 0 
                        ] 
                    }
                },
                "memberCount": { "$first": "$memberCount" }
            }
        }
    ];

collection.aggregate(pipeline, function(err, result){
    if (err) throw err;
    console.log(result);
});



  1. NodeJS Knox Impozantní výsledky v 400, soubor nebyl nahrán do S3 Bucket

  2. Mongodb aktualizuje konkrétní prvek z podpole

  3. Vše, co potřebujete vědět o klientovi MongoDB

  4. provádět pouze jednu z mnoha duplicitních úloh pomocí sidekiq?