sql >> Database >  >> NoSQL >> MongoDB

Kan ik voor elke geaggregeerde zoekopdracht in MongoDB een aanvraag indienen?

U kunt dat niet doen met de aggregatiepijplijn. U moet begrijpen dat MongoDB-aggregatie een reeks speciale operators is die op een verzameling worden toegepast. Wanneer u een aggregatiepijplijn uitvoert, leidt MongoDB operators naar elkaar toe, d.w.z. de uitvoer van een operator wordt de invoer van de volgende operator. Het resultaat van elke operator is een nieuwe verzameling documenten.

Daarom kan wat u in het bovenstaande probeert te bereiken eenvoudig worden herschreven als de volgende pijplijn zonder dat u eerst een reeks documenten hoeft te maken:

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

UPDATE

Follow-up van de wijzigingen in uw vraag, het uitvoeren van de volgende aggregatiepijplijn geeft u het gewenste resultaat:

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. Hoe evalueert MongoDB meerdere $or-statements?

  2. Mongoïde volgorde op lengte van array

  3. Bulk Upsert met MongoDB Java 3.0-stuurprogramma

  4. Inleiding tot HDFS-federatie en architectuur