MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy mogę ubiegać się o forEach w zapytaniu zbiorczym w MongoDB?

Nie możesz tego zrobić za pomocą potoku agregacji. Należy zrozumieć, że agregacja MongoDB to seria specjalnych operatorów stosowanych do kolekcji. Podczas wykonywania potoku agregacji MongoDB łączy ze sobą operatory, tj. dane wyjściowe operatora stają się danymi wejściowymi następującego operatora. Wynikiem każdego operatora jest nowy zbiór dokumentów.

Dlatego to, co próbujesz osiągnąć w powyższym, można po prostu przepisać na następujący potok bez konieczności tworzenia najpierw tablicy dokumentów:

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

AKTUALIZUJ

Kontynuacja zmian w pytaniu, uruchomienie następującego potoku agregacji da pożądany wynik:

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. MongoDB zainstalowany przez Homebrew nie działa

  2. MongoDB $strLenBytes

  3. Jak zrzucić całą bazę danych MongoDB jako text/json?

  4. Błąd MongoDB na mongos:zbyt wiele opcji pozycyjnych

  5. Przechowuj obraz w MongoDB za pomocą Node.js/Express i Mongoose