W szczególności chcę wydrukować wyniki mongodb find()
do pliku. Obiekt JSON jest zbyt duży, więc nie mogę wyświetlić całego obiektu z rozmiarem okna powłoki.
źródło
W szczególności chcę wydrukować wyniki mongodb find()
do pliku. Obiekt JSON jest zbyt duży, więc nie mogę wyświetlić całego obiektu z rozmiarem okna powłoki.
Powłoka zapewnia kilka fajnych, ale ukrytych funkcji, ponieważ jest to środowisko interaktywne.
Gdy uruchamiasz polecenia z pliku javascript za pośrednictwem mongo commands.js, nie uzyskasz identycznego zachowania.
Można to obejść na dwa sposoby.
(1) sfałszuj powłokę i spraw, by myślała, że jesteś w trybie interaktywnym
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
lub
(2) użyj Javascript do przetłumaczenia wyniku a find()
na drukowalny JSON
mongo dbname command.js > output.json
gdzie command.js zawiera to (lub jego odpowiednik):
printjson( db.collection.find().toArray() )
Spowoduje to wyświetlenie tablicy wyników, w tym [ ]
- jeśli nie chcesz, możesz iterować po tablicy i printjson()
każdym elemencie.
Nawiasem mówiąc, jeśli uruchamiasz tylko jedną instrukcję Javascript, nie musisz umieszczać jej w pliku i zamiast tego możesz użyć:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt
ale to mi dałoJavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
.Ponieważ robisz to na terminalu i chcesz po prostu sprawdzić rekord w rozsądny sposób, możesz użyć takiej sztuczki:
Używaj sesji w normalny sposób -
db.collection.find().pretty()
lub cokolwiek musisz zrobić, zignoruj długie dane wyjściowe i zakończ. Zapis Twojej sesji będzie znajdował się w pliku,tee
do którego została zapisana .Należy pamiętać, że dane wyjściowe mogą zawierać sekwencje ucieczki i inne śmieci, ponieważ powłoka mongo oczekuje sesji interaktywnej.
less
radzi sobie z nimi wdzięcznie.źródło
Po prostu umieść polecenia, które chcesz uruchomić w pliku, a następnie przekaż je do powłoki wraz z nazwą bazy danych i przekieruj dane wyjściowe do pliku. Tak więc, jeśli polecenie find znajduje się,
find.js
a baza danych jestfoo
, wyglądałoby to tak:źródło
out.json
.mongo foo < find.js > out.json
zadziałało.Umieść zapytanie (np.
db.someCollection.find().pretty()
) W pliku javascript, powiedzmyquery.js
. Następnie uruchom go w powłoce swojego systemu operacyjnego za pomocą polecenia:mongo yourDb < query.js > outputFile
Wynik zapytania będzie w pliku o nazwie „outputFile”.
Domyślnie Mongo drukuje pierwsze 20 dokumentów IIRC. Jeśli chcesz więcej, możesz zdefiniować nową wartość rozmiaru partii w powłoce Mongo, np
DBQuery.shellBatchSize = 100
.źródło
.js
rozszerzenie. Możesz pisać wszystkie te ładne zapytania do powłoki mongo bez ich zmiany.Używając
print
iJSON.stringify
możesz po prostu wygenerować ważnyJSON
wynik.Użyj
--quiet
flagi, aby odfiltrować szum powłoki z wyjścia.Użyj
--norc
flagi, aby uniknąć.mongorc.js
oceny. (Musiałem to zrobić ze względu na ładny program formatujący, którego używam, który generuje nieprawidłowe dane wyjściowe JSON ). UżyjDBQuery.shellBatchSize = ?
zastępowania?
limitem rzeczywistego wyniku, aby uniknąć stronicowania.Na koniec użyj,
tee
aby przesłać dane wyjściowe terminala do pliku:Mam nadzieję że to pomoże!
źródło
Korzystając z odpowiedzi Asyi Kamsky'ego, napisałem jednowierszowy skrypt dla systemu Windows. Linia wygląda następująco:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
Następnie można go uruchomić:
exportToJson.bat DbName CollectionName
źródło
Udało mi się zapisać wynik dzięki funkcji writeFile () .
Wersja powłoki Mongo to 4.0.9
źródło
Jest też do tego mongoeksport , ale nie jestem pewien, od której wersji jest on dostępny.
Przykład:
źródło
Jako odpowiedź Neodan mongoexport jest całkiem przydatny z
-q
opcją zapytania. Konwertuje równieżObjectId
do standardowego formatu JSON"$oid"
. Na przykład:źródło
możesz użyć tego polecenia, aby to osiągnąć:
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json
źródło