1. 程式人生 > >MongoDB之——儲存過程

MongoDB之——儲存過程

MongoDB 為很多問題提供了一系列的解決方案,針對於其它資料庫的特性,它仍然毫不示弱,表現的非比尋常。
MongoDB 同樣支援儲存過程。關於儲存過程你需要知道的第一件事就是它是用 javascript 來寫的。也許這會讓你很奇怪,為什麼它用 javascript 來寫,但實際上它會讓你非常滿意,MongoDB 儲存過程是儲存在 db.system.js 表中的,我們想象一個簡單的 sql 自定義函式如下:

function addNumbers( x , y ) {
return x + y;
}
下面我們將這個 sql 自定義函式轉換為 MongoDB 的儲存過程:
> db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});
儲存過程可以被檢視,修改和刪除,所以我們用 find 來檢視一下是否這個儲存過程已經被建立上了。
> db.system.js.find()
{ "_id" : "addNumbers", "value" : function cf__1__f_(x, y) {
return x + y;
} }
>
這樣看起來還不錯,下面我看來實際呼叫一下這個儲存過程:
> db.eval('addNumbers(3, 4.2)');
7.2
>
這樣的操作方法簡直太簡單了,也許這就是 MongoDB 的魅力所在。db.eval()是一個比較奇怪的東西,我們可以將儲存過程的邏輯直接在裡面並同時呼叫,而無需事先宣告儲存過程的邏輯。
> db.eval( function() { return 3+3; } );
6
>
從上面可以看出, MongoDB 的儲存過程可以方便的完成算術運算,但其它資料庫產品在儲存過程中可以處理資料庫內部的一些事情,例如取出某張表的資料量等等操作,這些MongoDB 能做到嗎?答案是肯定的, MongoDB 可以輕而易舉的做到,看下面的例項吧:
> db.system.js.save({_id:"get_count", value:function(){ return db.c1.count(); }});
> db.eval('get_count()')
2
可以看到儲存過程可以很輕鬆的在儲存過程中操作表。