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 됬다는 경고가 뜨던데, 그럼 대신 뭐를 써야 할지는 못찾겠네요.
댓글 없음:
댓글 쓰기