Post List

2015년 8월 5일 수요일

MongoDB Study #08 JavaScript Function

1. JavaScript 함수란 ?

MongoDB에서는 자주 사용되는 Program Code를 함수형태로 작성이 가능합니다.
자주 사용하지 않을 경우는 실행할때마다 작성이 가능하며, (RDBMS의 Anonymous Function)
자주 실행할 경우 DB에 저장해 두었다가 필요할 때마다 호출 할 수도 있습니다. (RDBMS의 Stored Procedure)

2. Non-Storing Function

DB에 저장하지 않고, 필요할 때마다 작성하여 호출합니다.
그냥 해당 함수명에 ()를 붙여서 호출해도 되며,
db.eval(함수명) 으로 실행해도 됩니다.

db.col_test.insert( { name : "Luna" } )
db.col_test.insert( { name : "PetaSQL" } )

db.col_test.find()
{ "_id" : ObjectId("55c147222a1c4137302b1805"), "name" : "Luna" }
{ "_id" : ObjectId("55c1472d2a1c4137302b1806"), "name" : "PetaSQL" }

db.col_test.count()
2

function countCol() { return db.col_test.count(); }

countCol()
2
db.eval(countCol)
2

db.col_test.drop() 

3. Storing Function

DB 내에 Compile된 실행 Code를 저장해두고 필요할 때마다 호출하는 방법입니다.

db.system.js.save( { _id : "calc_func" , value : function ( x , y , z ) { return x + y * z ; } } )
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "calc_func" })

db.eval("calc_func( 10 , 20 , 30 )")
610

db.system.js.find()
{ "_id" : "calc_func", "value" : function ( x , y , z ) { return x + y * z ; } }

db.system.js.remove({ _id : "calc_func" })
WriteResult({ "nRemoved" : 1 }) 

db.eval은 deprecated 됬다는 경고가 뜨던데, 그럼 대신 뭐를 써야 할지는 못찾겠네요.

댓글 없음:

댓글 쓰기