Печать вывода запроса Mongo в файл в оболочке mongo

2 дней с Монго, и у меня есть фон SQL, поэтому несите меня. Как и в mysql, очень удобно находиться в командной строке MySQL и выводить результаты запроса в файл на машине. Я пытаюсь понять, как я могу сделать то же самое с Монго, находясь в корпусе

Я могу легко получить вывод запроса, который я хочу, находясь вне оболочки и выполняя следующую команду:

mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" >> sample.json

вышеуказанный путь прекрасен, но он требует, чтобы я вышел из оболочки mongo или открыл новую вкладку терминала для выполнения этой команды. Было бы очень удобно, если бы я мог просто сделать это, все еще находясь внутри оболочки.

P. S: вопрос является ответвлением вопроса, который я разместил на так

5 ответов


AFAIK, нет интерактивной опции для вывода в файл, есть предыдущий вопрос, связанный с этим:печать вывода оболочки mongodb в файл

однако вы можете зарегистрировать весь сеанс оболочки, если вы вызвали оболочку с помощью команды tee:

$ mongo | tee file.txt
MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

тогда вы получите файл с этим контентом:

MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

чтобы удалить все команды и сохранить только вывод json, вы можете использовать команду, подобную:

tail -n +3 file.txt | egrep -v "^>|^bye" > output.json

затем вы получите:

{ "this" : "is a test" }
{ "this" : "is another test" }

Если вы вызываете оболочку со скриптом-файлом, адресом БД и аргументами -- quiet, вы можете перенаправить вывод (например, с помощью print ()) в файл:

mongo localhost/mydatabase --quiet myScriptFile.js > output 

мы можем сделать это таким образом -

mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000)' > users.json

на shellBatchSize аргумент используется для определения того, сколько строк клиенту mongo разрешено печатать. Его значение по умолчанию-20.


вам может быть полезно просто увеличить количество результатов, которые отображаются

в оболочке mongo > DBQuery.shellBatchSize = 3000

и затем вы можете выбрать все результаты из терминала и вставить в текстовый файл.

это то, что я собираюсь делать :)

(from:https://stackoverflow.com/a/3705615/1290746)


объединение нескольких условий:

  • напишите запрос mongo в js-файле и отправьте его с терминала
  • переключить / определить базу данных программно
  • вывод всех найденных записей
  • вырезать начальные выходные строки
  • сохранить вывод в файл JSON

myScriptFile.js

// Switch current database to "mydatabase"
db = db.getSiblingDB('mydatabase');

// The mark for cutting initial output off
print("CUT_TO_HERE");

// Main output
// "toArray()" method allows to get all records
printjson( db.getCollection('jobs').find().toArray() );

отправка запроса из терминала