如何使用 mongo shell 执行外部文件并在控制台中查看结果?
我有外部文件,比如query.js
我想执行它并在 cmd 中查看结果。
比方说,文件的内容是:
db.users.find()
如何使用 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
这是一个很好的解释,为什么你应该这样做。
我发现从文件运行 mongodb 查询并在控制台中查看输出的最简单方法是:
query.js
:
use my_db;
db.my_collection.findOne()
在命令行上:
mongo <query.js
这会将所有输出显示到控制台,就像您在 mongo shell 中单独运行查询一样。
这里有很好的信息 - 想指出 mongo 提供了一个 printjson() 函数,因此除非您需要比 printjson() 提供的更多功能,否则无需编写自己的函数。
示例 Mongo 文件 (test.js)
// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)
命令
mongo < test.js
如果你想use test
从 mongo 文件中省略,也许是为了删除 js 文件的 IDE 错误指示,你可以在命令行上指定目标 db:
mongo test < test.js
有趣的是:上面的示例使用重定向将文件推送到 mongo shell。这种调用约定允许您像在 shell 中一样输入命令;包括 mongo shell 便利命令,如use test
.
Mongo 提供了另一种脚本调用约定:mongo test test.js
省略了重定向操作符。此调用约定需要test.js
是正确的 javascript,并且不能使用 mongo shell 便捷方法,例如use test
;一个人会使用 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)
然后一切都按您的预期进行。请参阅为 mongo Shell 编写脚本。
这似乎在 mongo cli 中的某个时候发生了变化,我必须执行以下命令才能让它针对数据库运行文件(使用 mongo cli 版本 3.4.9)
mongo mongodb://192.168.1.1/YourDataBase scriptFile.js
然后用192.168.1.1
你的 db 的 ip / hostname 替换,YourDataBase
用数据库名称和指向一个现有文件