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

时间:2013-05-01 20:48:52

标签: mongodb mongo-shell

如何使用mongo shell执行外部文件并在控制台中查看结果?

我有外部文件,例如query.js,我想执行它并在cmd中查看结果。

假设文件内容为:

db.users.find()

5 个答案:

答案 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使用数据库名称并指向现有文件