Mongo shell从文件执行查询并显示结果

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()

+0

接受的答案将结果打印到控制台。 – TheCrazyProgrammer 2017-04-25 20:20:45

+0

谢谢@TheCrazyProgrammer,不敢相信我错过了。更新答案,重点关注内置的'printjson'函数和调用约定中的差异。 – 2017-04-26 15:08:00

其他答案没有提到的一点是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

+0

Nelu Malancea的答案似乎工作正常。 – TheCrazyProgrammer 2017-04-25 20:23:16

+0

将文件重定向到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与数据库名称并指向现有文件