Pytanie Jak agregować i scalać wynik w kolekcję?


Chcę agregować i wstawiać wyniki do istniejącej kolekcji, bez usuwania tej kolekcji. Dokumentacja wydaje się sugerować, że nie jest to bezpośrednio możliwe. Trudno mi w to uwierzyć.

Funkcja zmniejszania liczby map ma "tryby wyjściowe", w tym "scalanie", co robi to, co chcę. Szukam odpowiednika dla agregacji.

Nowa $out Etap agregacji obsługuje wstawianie do kolekcji, ale zastępuje kolekcję zamiast ją aktualizować. Gdybym to zrobił, musiałbym (jak sądzę) uruchomić kolejną mapę - zmniejszyć, by połączyć to z inną kolekcją, co wydaje się nieefektywne.

Czy brakuje mi czegoś lub brakuje funkcji w funkcji agregacji?


11
2018-01-07 16:17


pochodzenie




Odpowiedzi:


Użyłem danych wyjściowych z agregacji do wstawienia / scalenia do kolekcji:

    db.coll2.insert(
      db.coll1.aggregate([]).toArray()
    )

6
2018-05-25 09:55





Czytanie dokumentacja odpowiada dokładnie na to pytanie. Atm mongo nie jest w stanie zrobić, co chcesz.

Operacja $ out tworzy nową kolekcję w bieżącej bazie danych, jeśli jeszcze nie istnieje. Kolekcja nie jest widoczna, dopóki agregacja nie zostanie ukończona. Jeśli agregacja się nie powiedzie, MongoDB nie utworzy kolekcji.

Jeśli kolekcja określona przez operację $ out już istnieje, to po zakończeniu agregacji etap $ out atomicznie zastępuje istniejącą kolekcję nowym zbiorem wyników. Operacja $ out nie zmienia żadnych indeksów istniejących w poprzedniej kolekcji. Jeśli agregacja się nie powiedzie, operacja $ out nie spowoduje żadnych zmian w poprzedniej kolekcji.


3
2018-01-07 16:21



Dzięki, przeczytałem tę stronę (stąd link w moim pytaniu) i opisałem obejście. Pytałem, czy istnieje jakiś inny mechanizm, który to umożliwi. - Joe
jeśli pracujesz bezpośrednio w powłoce, możesz rozważyć rozwiązanie opisane tutaj learnmongo.com/posts/... ale oczywiście nie zostanie to wykonane po stronie serwera, ale wymaga pobrania i ponownego wstawienia danych - chk
Dzięki, ale spowoduje to skopiowanie milionów rekordów do tyłu i do przodu, co znacznie przekracza 16 MB! - Joe
tak, byłem pewien, że to nie jest odpowiednie dla ciebie. Twoja praca dookoła jest prawdopodobnie drogą do zrobienia. Domyślam się, że "mongoimport" również nie wchodzi w grę? - chk


Jeśli nie utknąłeś przy korzystaniu z Agregatorów agregacji, możesz zrobić przyrostową mapę - zmniejszyć w kolekcji. Ten operator umożliwia scalanie wyników z istniejącą kolekcją.

Zobacz dokumentację poniżej:

http://docs.mongodb.org/manual/tutorial/perform-incremental-map-reduce/


0
2018-05-05 19:07