Печать вывода запроса 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
и затем вы можете выбрать все результаты из терминала и вставить в текстовый файл.
это то, что я собираюсь делать :)
объединение нескольких условий:
- напишите запрос 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() );
отправка запроса из терминала