1. 程式人生 > >Mongodb儲存過程使用

Mongodb儲存過程使用

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