28

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

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

比方说,文件的内容是:

db.users.find()
4

5 回答 5

43

将其放入您的query.js文件中:

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

并运行:

mongo db_name query.js

这是一个很好的解释,为什么你应该这样做。

于 2013-05-01T21:01:17.480 回答
16

我发现从文件运行 mongodb 查询并在控制台中查看输出的最简单方法是:

query.js

use my_db;
db.my_collection.findOne()

在命令行上: mongo <query.js

这会将所有输出显示到控制台,就像您在 mongo shell 中单独运行查询一样。

于 2013-12-06T18:33:13.873 回答
6

这里有很好的信息 - 想指出 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().

于 2015-10-25T20:36:00.883 回答
2

其他答案没有提到的一件事是该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 编写脚本

于 2016-02-20T12:48:03.430 回答
1

这似乎在 mongo cli 中的某个时候发生了变化,我必须执行以下命令才能让它针对数据库运行文件(使用 mongo cli 版本 3.4.9)

mongo mongodb://192.168.1.1/YourDataBase scriptFile.js

然后用192.168.1.1你的 db 的 ip / hostname 替换,YourDataBase用数据库名称和指向一个现有文件

于 2017-10-03T12:46:42.923 回答