2012-01-05 45 views
1

我在我的mongodb数据库文档中有几个id。我需要通过脚本在这些ID上创建索引,以便我不必一次又一次运行ensureIndex命令。从mongodb shell运行有mongodb查询的脚本

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

我只是运行脚本(包含所有这些命令),我应该完成。任何想法如何从mongodb shell运行脚本?另外应该是脚本的扩展?

Juhi。

+0

你想再次运行吗?或者是什么? – 2012-01-05 13:33:54

+1

顺便说一句,您应该接受有用的答案。 – 2012-01-06 22:43:53

回答

12

您可以将您的命令放入一个JavaScript文件(使用.js扩展名)并使用mongo控制台实用程序来运行它。就像这样:

mongo --host my_host --port my_port my_db create_indexes.js 

create_indexes.js文件将包含你的命令:

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

是啊,也请看看这里的一些指针:http://www.mongodb.org/display/DOCS/Scripting+the+shell – 2012-01-05 13:54:43

+0

工程对我很好.. :)顺便说一句..它会在分片工作正常enviornment?我的意思是如果我在mongos shell上运行它,它会反映在我正在运行的碎片上,还是必须单独在我的碎片上运行.js? – juhi 2012-01-06 13:48:05

+0

如果你使用'mongos'运行它,它将在所有碎片上执行。 – 2012-01-06 14:52:39

8

您还可以从MongoDB的外壳脚本。我喜欢将一些东西添加到一个函数中,以方便调用它们。像这样创建脚本:

var ensureIndexes = function() { 
    db.getCollection("elements").ensureIndex({customerId:1}); 
    db.getCollection("elements").ensureIndex({userId:1}); ........ 
} 

保存以上对ensureIndexes.js文件命名,然后从蒙戈外壳输入:

load('ensureIndexes.js') 

现在,你就可以进入到ensureIndexes()调用该函数。我有很多包含这种实用功能的脚本。

+0

这是一个很好的窍门,这将确保我们的自定义函数,而不是由mongodb shell提供的js函数.. :)顺便说一句...它会在分片环境中正常工作吗?我的意思是如果我在mongos shell上运行它,它会反映在我正在运行的碎片上,还是必须单独在我的碎片上运行.js? – juhi 2012-01-06 13:49:25

+1

@juhi是的,你可以做到这一点。看到这个页面:http://www.mongodb.org/display/DOCS/Server-side+Code+Execution,尤其是服务器端存储脚本部分。你可以在任何地方运行它们。 – dlaidlaw 2012-01-09 19:38:51

+0

真的很喜欢这个提示!谢谢! – the0ther 2012-09-23 16:29:54

4

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

我做了一个使用unix shell的重定向。

所以从UNIX命令行键入:

mongo < your_script.js 

你可以说出你的命令your_script.js内。