如何使用mongo shell執行外部文件並在控制檯中查看結果?Mongo shell從文件執行查詢並顯示結果
我有外部文件,如query.js
,我想執行它並在cmd中查看結果。
比方說,該文件的內容是:
db.users.find()
如何使用mongo shell執行外部文件並在控制檯中查看結果?Mongo shell從文件執行查詢並顯示結果
我有外部文件,如query.js
,我想執行它並在cmd中查看結果。
比方說,該文件的內容是:
db.users.find()
將這個到您的query.js
文件:
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
並運行:
mongo db_name query.js
這裏有一個good explanation爲什麼你應該這樣做。
我發現從文件中運行的MongoDB查詢,看到控制檯輸出的最簡單的方法是這樣的:
query.js
:
use my_db;
db.my_collection.findOne()
在命令行: mongo <query.js
這會將所有輸出顯示到控制檯,就像您正在單獨運行mongo shell中的查詢一樣。
好信息在這裏 - 想指出,mongo提供了一個printjson()函數,因此除非需要printjson()提供的更多功能,否則不需要編寫自己的函數。
例蒙戈文件(test.js)
// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)
命令
mongo < test.js
如果你想從蒙戈文件省略use test
,也許是爲了去除IDE錯誤指示的js文件,你可以在命令行中指定目標分區:
mongo test < test.js
有趣的是:th上面的示例使用重定向將文件推送到mongo shell。這個調用約定允許你像在shell中一樣輸入命令;包括諸如use test
的mongo shell便利命令。
Mongo提供了另一個腳本調用約定:mongo test test.js
它省略了重定向操作符。這種調用約定要求test.js
是合適的javascript,並且不能使用像use test
這樣的mongo shell便利方法;一個會使用像JavaScript一樣的getSiblingDB()
。
其他答案沒有提到的一點是use db
命令在外部腳本中不起作用。最好的辦法是使用getSiblingDB
,例如,如果我想使用的數據庫名爲my_db
:
db = db.getSiblingDB("my_db");
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
然後一切按你期望的那樣。見Write Scripts for the mongo Shell。
Nelu Malancea的答案似乎工作正常。 – TheCrazyProgrammer 2017-04-25 20:23:16
將文件重定向到mongo shell允許使用mongo shell命令。 – 2017-04-26 01:57:51
這似乎在蒙哥CLI某個時間點發生了變化,我必須執行以下命令來讓它對數據庫運行一個文件(蒙戈CLI版本3.4.9)
mongo mongodb://192.168.1.1/YourDataBase scriptFile.js
然後將192.168.1.1
替換爲數據庫的ip/hostname,YourDataBase
與數據庫名稱並指向現有文件
接受的答案將結果打印到控制檯。 – TheCrazyProgrammer 2017-04-25 20:20:45
謝謝@TheCrazyProgrammer,不敢相信我錯過了。更新答案,重點關注內置的'printjson'函數和調用約定中的差異。 – 2017-04-26 15:08:00