2012-01-05 76 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內。