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

Problem z agregacją i grupowaniem MongoDB w MeteorJS

Jeśli używasz agregatu Meteor hacks pakiet do implementacji .aggregate() polecenie w swojej kolekcji, to w odpowiedzi zwróci tylko tablicę. Musisz więc przerobić to na formę opublikowanej kolekcji:

Meteor.publish("completedLB,function() {
    var self = this;

    var results = userCompleted.aggregate([
        { "$match": { "progressState": true } },
        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": "$progressState" },
             "count": { "$sum": 1 }
        }},
        { "$sort": { "_id": 1 } }
    ]);

    _.each(results,function(result) {
        self.added("client_collection_name",Random.id(), {
            userId: result._id,
            progressState: result.progressState,
            count: result.count
        });
    });
    self.ready();
});

Lub dołączyć false liczy się tak, jak sugeruje sugerowany wynik:

        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": true },
             "count": { "$sum": { "$cond": ["$progressState", 1,0] }
        }},
        { "$sort": { "_id": 1 } }

Jako potok z $cond ocena do konwersji na numeryczną.

Gdzie w podstawowej agregacji po prostu „podliczasz” dopasowane wyniki i oczywiście $sort odnosi się do pola obecnego w danych wyjściowych, które według twojego przykładu byłoby wartością „userId” teraz w _id klucz z agregacji, ale w razie potrzeby może być również „zliczany” w kolejności według łącznej liczby.

Ta część powodowała błąd, jako $sort jest bieżącym polem, a nie wartością pola z $ notacja.

Ale oczywiście, aby opublikować jako kolekcję dostępną dla klienta, musisz zastąpić rzeczywisty _id z czymś oczekiwanym. Tak więc działa tutaj losowe generowanie identyfikatorów, podobnie jak włączanie innych pól.

Aby uzyskać więcej szczegółów, a także alternatywę dla pakietu „hacks”, który działa tylko z instalacją waniliową, istnieje również ta odpowiedź przeze mnie, który ma pełną listę jako przykład.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. node.js moongodb dwa znaleziska

  2. (MongoDB Compass) wyszukiwanie przy użyciu let not working

  3. Strumień zmian MongoDB:Czy mogę uzyskać wartość przed aktualizacją/usunięciem?

  4. Proaktywne monitorowanie MongoDB (kąt programisty/doradców)

  5. MongoDB filtruje według właściwości tablicy, tylko jeśli istnieje