Как получить результаты команды mongo в плоский файл

Как экспортировать результаты команды MongoDB в плоский файл

Например, если мне нужно преобразовать db.collectionname.find() в плоский файл.

Я пробовал db.collectionname.find() >> "test.txt", похоже, не работает.


person QVSJ    schedule 10.10.2012    source источник


Ответы (7)


вы можете попробовать следующее из командной строки

mongo 127.0.0.1/db --eval "var c = db.collection.find(); while(c.hasNext()) {printjson(c.next())}" >> test.txt

предполагая, что у вас есть база данных с именем «db», работающая на локальном хосте, и коллекция с именем «коллекция», это экспортирует все записи в файл с именем test.txt.

Если у вас есть более длинный скрипт, который вы хотите выполнить, вы также можете создать файл script.js и просто использовать

mongo 127.0.0.1/db script.js >> test.txt

надеюсь, это поможет

person peshkira    schedule 10.10.2012
comment
ты это скопировал? если да, дважды проверьте имя базы данных и имя коллекции в запросе. Если вы только что напечатали его самостоятельно, дважды проверьте правильность написания. Ошибка, которую вы получаете, означает, что вы что-то написали с ошибкой... работает для меня (только что проверил еще раз) - person peshkira; 10.10.2012
comment
использовать ваши-моменты ваши-моменты --eval var c = db.profile.find(); while(c.hasNext()) {printjson(c.next())} ›› C:\exp\test.txt, где your-moments — это имя базы данных, а profile — это имя коллекции. - person QVSJ; 10.10.2012
comment
Спасибо за помощь. Поиграю с этим и посмотрю, заработаю ли я. - person QVSJ; 10.10.2012
comment
попробуйте еще вот это: mongoexport --db your-moments --collection profile --out test.txt - person peshkira; 10.10.2012
comment
Он печатает только [объект объекта] в файле - person Shashank; 18.11.2013
comment
этому ответу один год. Возможно, что-то изменилось в версии, которую вы используете. Вы можете попробовать использовать функцию printjson для простого объекта из вашей базы данных в консоли mongo, чтобы проверить, работает ли она. Если нет, вам придется изменить функцию printjson - person peshkira; 19.11.2013
comment
Как мне это сделать для удаленной базы данных mongo? Я попробовал mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt, но это дало мне JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL. - person Sheharyar; 05.12.2013
comment
@SheharyarNaseer хорошо, сообщение об ошибке довольно ясно. кажется, у вас есть проблемы с вашей командой javascript или, возможно, с кавычками. Если ваш запрос длиннее, я бы дважды проверил его, сохранил в файле и загрузил весь файл. - person peshkira; 05.12.2013
comment
Это правильно, и я сначала использовал этот ответ, но столкнулся с проблемой, когда выполнял запрос $not и отправлял в запрос поля в кавычках. Без $not я мог избежать кавычек, но с $not я не смог заставить его работать. В этом случае одиночные кавычки, а не двойные кавычки вокруг всего eval могут работать лучше. - person Paul; 11.09.2014
comment
Работал отлично! Просто не забудьте использовать одинарные кавычки или удалить любые двойные кавычки в вашем запросе. - person Crysfel; 19.08.2019

Я не знаю способа сделать это напрямую из оболочки mongo, но вы можете заставить mongoexport выполнять запросы и отправлять результаты в файл с параметрами -q и -o:

mongoexport -h mongo.dev.priv -d models -c profiles -q '{ $query : { _id : "MRD461000" } }' -o MRD_Series1.json

Приведенные выше обращения запрашивают коллекцию профилей в базе данных моделей, получая документ JSON для _id = "MRD641000". Работает на меня.

person Bob Kuhar    schedule 10.10.2012
comment
Я чувствую, что это лучший ответ, чем выбранный в настоящее время. - person Paul; 11.12.2019

Использовать это

mongo db_name --username user --password password < query1.js >> result.txt
person Piotr Fryga    schedule 28.05.2015

Попробуйте так - возвращает json файл с данными запроса, можно поменять .json на .txt и прочее.

mongoexport --db products --collection clicks --query '{"createdInt":{$gte:20190101}, "clientId":"123", "country":"ES"}' --out clicks-2019.json
person amic    schedule 17.01.2019

Пропустив БД, которая должна быть фактической БД в ответе Пешкиры, вот общий синтаксис для одного вкладыша в оболочке (при условии отсутствия пароля):

mongo <host>:<db name> --eval "var x = <db name>.<collection name>.<query>; while(x.hasNext()) { printjson( x.next() ) }" >> out.txt

Я тестировал его как на своем Mac, так и на облаке Google Ubuntu 15 с Mongo 3+.

person zevij    schedule 02.10.2015
comment
Я думаю, что вторым должен быть командный ключ db, а не ‹db name›; вот так: mongo ‹host›:‹db name› --eval var x = db.‹название коллекции›.‹query›; while(x.hasNext()) { printjson(x.next()) } ›› out.txt - person Loebre; 07.01.2019

Установите MongoDB Compass, тогда у него будет инструмент для экспорта результатов запроса в файлы Json/CSV.

person Ken    schedule 11.06.2020

mongoexport --db имя_базы_данных --коллекция имя_коллекции --csv --out имя_файла.csv -f поле1, поле2, поле3

person Arnab Ghosh    schedule 22.08.2016
comment
Включение некоторого объяснения вашего ответа поможет другим, которые столкнутся с этим решением. - person Steven; 22.08.2016