MongoDB에서 저장된 JavaScript 다루기
MongoDB는 서버 측에서 실행할 JavaScript 함수를 데이터베이스 안에 직접 저장할 수 있습니다. 저장된 함수는 system.js라는 특수 컬렉션에 보관되며, db.system.js.save() 메서드를 사용해 등록합니다.
함수 저장 문법
db.system.js.save({
_id: "anyFunctionName",
value: function (returnValue) {
return 'yourMessage ' + returnValue;
}
})_id 필드에는 함수 이름을, value 필드에는 실제로 실행할 함수 본문을 지정합니다.
실제 구현 예제
다음은 문자열과 전달받은 값을 함께 반환하는 간단한 함수를 저장하는 쿼리입니다.
> db.system.js.save({
... _id: "returnValue",
... value: function (data) {
... return 'The value==== ' + data;
... }
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })nModified : 1이 반환되면 함수가 정상적으로 저장된 것입니다.
저장된 함수 호출하기
저장한 함수를 실제로 호출해 데이터를 출력하려면 db.eval()을 사용합니다.
> db.eval("returnValue(20)")
WARNING: db.eval is deprecated위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
The value==== 20
주의 사항
실행 결과에서 확인할 수 있듯이 db.eval()은 더 이상 권장되지 않는(deprecated) 기능입니다. 보안과 성능상의 문제로 인해 최신 버전의 MongoDB에서는 사용을 피하는 것이 좋습니다. 대신 애플리케이션 측에서 로직을 처리하거나, 집계 파이프라인(aggregation pipeline)과 $function 연산자 같은 대안을 활용하는 것이 바람직합니다.