sql >> Databasteknik >  >> NoSQL >> MongoDB

Kan jag ansöka om Every in aggregerad fråga i MongoDB?

Du kan inte göra det med aggregeringspipelinen. Du bör förstå att MongoDB-aggregation är en serie speciella operatorer som tillämpas på en samling. När du kör en aggregeringspipeline kopplar MongoDB operatörer till varandra, dvs. utdata från en operatör blir indata för följande operatör. Resultatet av varje operatör är en ny samling dokument.

Därför kan det du försöker uppnå i ovanstående helt enkelt skrivas om till följande pipeline utan att behöva skapa en mängd dokument 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);
});

UPPDATERA

Uppföljning av ändringarna av din fråga, att köra följande aggregeringspipeline kommer att ge dig det önskade resultatet:

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. Effekt mongodb _id-generering på indexering

  2. MongoDB:Avvägningar med att ta bort en samling kontra att ta bort alla dess dokument

  3. MongoDB som en tidsseriedatabas

  4. Så här gör du:Använd HBase Thrift Interface, del 2:Infoga/hämta rader