MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Мога ли да кандидатствам за всяка в обобщена заявка в MongoDB?

Не можете да направите това с тръбопровода за агрегиране. Трябва да разберете, че агрегирането на MongoDB е поредица от специални оператори, приложени към колекция. Когато изпълнявате тръбопровод за агрегиране, MongoDB прехвърля операторите един към друг, т.е. изходът на даден оператор става вход на следващия оператор. Резултатът от всеки оператор е нова колекция от документи.

Следователно това, което се опитвате да постигнете в горното, може просто да бъде пренаписано като следния конвейер, без да е необходимо първо да създавате масив от документи:

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

АКТУАЛИЗАЦИЯ

Следвайки промените във вашия въпрос, стартирането на следния конвейер за агрегиране ще ви даде желания резултат:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis срещу MongoDB:Какво трябва да знаете

  2. Mongodb:db.collection.copyTo() и eval() са отхвърлени. Какви са алтернативите?

  3. как да дефинирате местоположение в обект с помощта на mongodb

  4. Допълнително поле към съществуваща колекция

  5. Сигурност на MongoDB – ресурси за защита на NoSQL DBs