原文鏈接:https://blog.csdn.net/l1028386804/article/details/79995587
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
可以看到存儲過程可以很輕松的在存儲過程中操作表。