Mongodb儲存過程使用
阿新 • • 發佈:2019-01-28
Mongodb支援儲存過程的使用,儲存過程可以接收和輸出引數跟sql中的儲存過程概念類似,返回執行儲存過程的狀態值,可以巢狀呼叫。Mongodb的儲存過程是使用Javascript編寫,並存儲在db.system.js表中。我們可以自定義儲存過程,然後存入該集合中,具體示例如下:
Shell程式碼
> db.system.js.save({_id:"addNumbers",value:function(x,y){return x+y;}});
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "addNumbers" })
如上面所示:db.system.js.save命令接收2個引數,_id代表儲存過程的名字,value代表儲存過程的定義。
我們可以對儲存過程進行查詢、修改和刪除,查詢使用find()命令:
Shell程式碼
> db.system.js.find();
{ "_id" : "addNumbers", "value" : function (x,y){return x+y;} }
在mongodb中,如果需要執行儲存過程,則需要使用db.evel(‘procedureName(param1,param2,……)’); 命令,示例如下:
Shell程式碼
> db.eval ("addNumbers(3,8)")
11
除了這種方式之外,我們還可以直接把儲存過程的邏輯放在db.eval()引數中直接呼叫,無需事先宣告儲存過程的邏輯,如下所示:
示例1:執行儲存過程查詢posts集合中的文件數目
Shell程式碼
> db.eval(function(){return db.posts.count();})
0
示例2:把儲存過程本身當做引數傳遞給db.eval()命令
> db.eval(function(x,y) { return addNumbers(x, y); }, 17, 25)
42