MongoDB Stored Procedures
MongoDB에서 저장 프로시저(Stored Procedures) 사용하기
개요
MongoDB에서는 system.js 라는 특별한 컬렉션이 존재하는데, 이곳에 서버측에서 실행되는 함수를 저장할 수 있다.
저장 프로시저를 작성하는데 사용하는 언어는 서버측 Javascript 언어를 사용하므로 Closure를 비롯한 자바스크립트가 제공하는 언어적 체계를 사용할 수 있다. MongoDB에서 저장 프로시저를 작성하는 것은 자바스크립트 함수를 작성하는 일에 지나지 않으며 MongoDB의 커리를 통해 쉽게 호출할 수 있다
저장 프로시저로 사용될 함수
function addNumbers( x , y ) {
return x + y;
}
위의 함수를 저장 프로시저로 등록 ( system.js 라는 컬렉션에 저장한다 )
> db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});
저장 프로시저로 등록된 함수를 확인
> db.system.js.find()
{ "_id" : "addNumbers", "value" : function cf__3__f_(x, y) {
return x + y;
} }
몽고쉘에서 저장 프로시저 호출 테스트
> db.eval('addNumbers(20, 33)')
WARNING: db.eval is deprecated
53
db.eval()을 사용하지 않고 저장 프로시저 호출하기
위와 같이 db.eval() 함수를 사용하는 것은 3.0 버전부터 Deprecated 상태이며 대체할 수 있는 수단은 정상적인 커리를 실행하는 함수를 사용하는 것이다
>db.loadServerScripts() : system.js 컬렉션 안에 저장된 저장 프로시저가 모두 로드되고 로드된 저장 프로시저는 쉘에서 직접 호출할 수 있다
>addNumbers(20,33)
53
> db.product.insert( { "title" : "USB Memory", "price" : addNumbers(20,33) } )
WriteResult({ "nInserted" : 1 })
> db.product.find( { "title" : "USB Memory" } )
{ "_id" : ObjectId("56658d5ef0c160ceda8a0113"), "title" : "USB Memory", "price" : 53 }