2012-03-24 90 views

回答

2

這聽起來像你引用server-side functions

創建/更新服務器端的功能是作爲更新system.js集合一樣簡單:

db.system.js.save({ _id : "foo" , value : function(x , y){ return x + y; } }); 

這裏的問題是真正的「使用」服務器端功能。首先,你必須寫一些尷尬的更新/插入語句。其次,這些不是存儲過程。它們不是爲了速度而編譯的,目的是在服務器上運行它們。

如果使用服務器端功能查詢不會使用索引進行任何函數中。另外它將使用引擎蓋下的eval功能,它可以鎖定您的數據庫。

而且,沒有觸發,所以你也不能用於觸發使用這些。

總體而言,沒有大量使用服務器端的功能,這可能是爲什麼他們得到的文檔3段。

如果您需要先進的查詢功能看看新的聚合框架。如果你正在尋找某種形式的觸發器,你將不得不推出自己的觸發器。如果你正在尋找存儲過程,這其實不是。

+0

嗯。如果這是如此混亂,爲什麼它確實存在?是否有任何情況下只能使用服務器端功能來解決問題? – antitoxic 2012-03-24 19:43:29

+0

我認爲這是當他們認爲它可能是下一個存儲過程時創建的那些東西之一。但是,這個夢真的是因爲他們一次只能有一個javascript解釋器的實例而破滅。值得記住的是,MongoDB只有幾年的歷史,他們沒有足夠的人來真正更新文檔。 – 2012-03-25 06:15:21

+0

還有一件事:我閱讀** mapReduce **您描述的所有回退應用於mapReduce **嗎? – antitoxic 2012-03-25 07:46:23

相關問題