Mongo shell从文件执行查询并显示结果
如何使用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