MongoDB/Stored Functions

MongoDB Stored Procedures

Soul-Learner 2015. 12. 7. 22:54

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 }