运行包含来自mongodb shell的mongodb查询的脚本

运行包含来自mongodb shell的mongodb查询的脚本,mongodb,Mongodb,我的mongodb数据库文档中有几个ID。我需要通过脚本在这些ID上创建索引,这样就不必反复运行ensureIndex命令 db.getCollection("elements").ensureIndex({customerId:1}); db.getCollection("elements").ensureIndex({userId:1}); ........ 我只是运行脚本(包含所有这些命令),应该完成了。知道如何从mongodb shell运行脚本吗?脚本的扩展应该是什么 朱希 您可以将

我的mongodb数据库文档中有几个ID。我需要通过脚本在这些ID上创建索引,这样就不必反复运行ensureIndex命令

db.getCollection("elements").ensureIndex({customerId:1});
db.getCollection("elements").ensureIndex({userId:1});
........
我只是运行脚本(包含所有这些命令),应该完成了。知道如何从mongodb shell运行脚本吗?脚本的扩展应该是什么


朱希

您可以将命令放入javascript文件(扩展名为
.js
并使用
mongo
控制台实用程序运行它。像这样:

mongo --host my_host --port my_port my_db create_indexes.js
其中
create_index.js
文件将包含您的命令:

db.getCollection("elements").ensureIndex({customerId:1});
db.getCollection("elements").ensureIndex({userId:1});
....

您还可以从mongodb shell运行脚本。我喜欢向函数中添加一些东西,以方便调用它们。创建如下脚本:

var ensureIndexes = function() {
    db.getCollection("elements").ensureIndex({customerId:1});
    db.getCollection("elements").ensureIndex({userId:1}); ........
}
将上述内容保存到名为ensureIndex.js的文件中,然后从mongo shell输入:

load('ensureIndexes.js')

现在,您可以输入
ensureIndex()
来调用该函数。我有很多脚本包含这样的实用程序函数。

如果您使用的是任何类似unix的操作系统,它可能会有所帮助

我使用unixshell进行了重定向

因此,您可以在UNIX命令行中键入:

mongo < your_script.js
mongo

在your_script.js中,您可以陈述您的命令。

您想再次运行它,还是什么?顺便说一句,您应该接受有用的答案。是的,也可以在这里查看一些提示:对我来说很好:)顺便提一下它在碎片化的环境中能正常工作吗?我的意思是,如果我在mongos shell上运行它,它会反映在我正在运行的碎片上吗?或者我必须在我的碎片上单独运行.js?如果对
mongos
,它将在所有碎片上执行。这是一个很好的技巧,它将确保我们的自定义函数,而不是mongodb shell提供的js函数:)顺便提一下它在碎片化的环境中能正常工作吗?我的意思是,如果我在mongos shell上运行它,它会反映在我正在运行的碎片上,还是我必须在我的碎片上单独运行.js?@juhi是的,你可以这样做。请参阅本页:特别是关于在服务器端存储脚本的部分。然后你可以在任何地方运行它们。