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

Kan jeg ansøge om hver samlet forespørgsel i MongoDB?

Det kan du ikke med aggregeringspipelinen. Du bør forstå, at MongoDB-aggregering er en række specielle operatorer, der anvendes på en samling. Når du udfører en aggregeringspipeline, overfører MongoDB operatører til hinanden, dvs. outputtet fra en operatør bliver input fra følgende operatør. Resultatet af hver operatør er en ny samling af dokumenter.

Derfor kan det, du forsøger at opnå i ovenstående, ganske enkelt omskrives som følgende pipeline uden at skulle oprette en række dokumenter først:

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

OPDATERING

Opfølgning på ændringerne af dit spørgsmål vil kørsel af følgende aggregeringspipeline give dig det ønskede resultat:

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. Sådan indstilles featureCompatibilityVersion i MongoDB

  2. Grundlæggende om implementering af et MongoDB-replikasæt og -skår ved hjælp af dukke

  3. Forårsaget af:org.bson.BsonInvalidOperationException:Ugyldig tilstand INITIAL

  4. tæl array-forekomster på tværs af alle dokumenter med mongo