如何使用mongo shell执行外部文件并在控制台中查看结果?
我有外部文件,例如query.js
,我想执行它并在cmd中查看结果。
假设文件内容为:
db.users.find()
答案 0 :(得分:34)
将其放入query.js
文件中:
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
并运行:
mongo db_name query.js
这是good explanation你应该这样做的原因。
答案 1 :(得分:13)
我发现从文件运行mongodb查询并在控制台中查看输出的最简单方法是:
query.js
:
use my_db;
db.my_collection.findOne()
在命令行上:
mongo <query.js
这将显示控制台的所有输出,就像您在mongo shell中单独运行查询一样。
答案 2 :(得分:4)
这里的好消息 - 想要指出mongo提供了一个printjson()函数,因此除非你需要比printjson()提供的更多功能,否则不需要编写自己的函数。
示例Mongo文件(test.js)
// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)
命令
mongo < test.js
如果要从mongo文件中省略use test
,或许要删除js文件的IDE错误指示,可以在命令行中指定目标db:
mongo test < test.js
有趣的是:上面的示例使用重定向将文件推送到mongo shell。这个调用约定允许您像在shell中一样输入命令;包括mongo shell方便命令,如use test
。
Mongo提供了另一个调用约定的脚本:mongo test test.js
,它省略了重定向运算符。这个调用约定要求test.js
是正确的javascript,不能使用像use test
这样的mongo shell方便方法;一个人会使用像getSiblingDB()
这样的javascript等价物。
答案 3 :(得分:1)
其他答案没有提到的一点是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。
答案 4 :(得分:1)
这似乎在mongo cli的某些时候发生了变化,我不得不执行以下命令让它对数据库运行一个文件(使用mongo cli版本3.4.9)
mongo mongodb://192.168.1.1/YourDataBase scriptFile.js
然后将192.168.1.1
替换为数据库的ip / hostname,YourDataBase
使用数据库名称并指向现有文件