W przypadku kopii zapasowej produkcji MongoDB zaleca mongodump zamiast mongoexport w celu zapewnienia dokładności danych. Musiałbym jednak „wyszorować” dane z bazy danych MongoDB przed utworzeniem kopii zapasowej. Nie znam żadnych opcji oczyszczania danych po stronie serwera innych niż mongoexport . Dwa pytania:
- Czy mongoexport ma dostęp do pamięci podręcznej MongoDB w pamięci RAM? Czy zmieniłby działający zestaw w pamięci RAM, tak jak robi to Mongodump ?
- Polecenie mongodump ma tę opcję --query . „Udostępnia dokument JSON jako zapytanie, które opcjonalnie ogranicza dokumenty zawarte w danych wyjściowych mongodump.” Czy do wykluczenia niektórych pól w dokumencie potrzeba zapytania?
mongodump
kopię zapasową migawki systemu plików lub napisać niestandardowy eksport, jeślimongoexport
nie zrobi tego, czego potrzebujesz. Wszelkie narzędzia lub programy, które odczytują dane,mongod
mogą zmienić zestaw roboczy, jeśli dane do wyeksportowania są większe niż dostępna pamięć RAM. Migawki systemu plików są mniej uciążliweOdpowiedzi:
W odpowiedzi na twoje pierwsze pytanie oba narzędzia (domyślnie) przejdą po
_id
indeksie, aby pobrać dane, a następnie wypiszą je na dysk. Tak, oba narzędzia będą miały podobny wpływ na twój zestaw roboczy, dlatego generalnie zaleciłbym uruchomienie ich przeciwko dodatkowemu (najlepiej ukrytemu dodatkowemu, jeśli to możliwe). W komentarzach powtórzę Stennie i zalecę inne metody tworzenia kopii zapasowych, jeśli masz do czynienia z dużą ilością danych.W przypadku drugiego pytania zakładam, że szukasz
mongodump
ekwiwalentu--fields
opcji od,mongoexport
aby zrzucić tylko określone pola. Opcja zapytania mogą być wykorzystywane do Wyszukane, ale to nie może być używany z występem (aby zaznaczyć pola zwrócone) - jest to wniosek, że funkcja jest śledzona w TOOLS-28 , ale nie jest jeszcze zaplanowane. Jak również wspomniał Stennie, drugą opcją jest napisanie niestandardowego eksportera, który będzie pasował do twoich potrzeb (i ponownie, nadal zalecałbym uruchomienie go na dodatkowym, aby chronić zestaw roboczy).źródło
(przepraszam, nie wiem)
--query wybierze lub wykluczy całe dokumenty, a nie pola.
Byłoby jednak dobrym pomysłem:
źródło
Mongoexport faktycznie zachowuje typy, ale sprawia, że dane są niespójne. Jeśli eksportujesz pole z Ints i Longs, wyeksportuje je odpowiednio jako obiekty Numbers i JSON, co może utrudnić dalszą drogę.
„Tryb ścisły. Reprezentacje trybu ścisłego dla typów BSON są zgodne z JSON RFC. Każdy parser JSON może analizować te reprezentacje trybu ścisłego jako pary klucz / wartość; jednak tylko wewnętrzny parser JSON MongoDB rozpoznaje informacje o typie przekazywane przez format.”
https://docs.mongodb.com/manual/reference/mongodb-extended-json/
źródło