서버에 JavaScript 함수 저장
중요
MongoDB 8.0부터 서버 측 JavaScript는 더 이상 사용되지 않습니다. system.js
기능은 일부 기능에서 작동하지 않을 수 있습니다.
재사용을 위해 JavaScript 함수를 저장할 수 있는 특별 시스템 컬렉션(system.js
)이 있습니다.
시작하기 전에
이 작업에서는 레거시 mongo
셸을 사용하여 system.js
컬렉션에서 서버 측 함수를 로드합니다. 해당 버전의 셸은 더 이상 지원되지 않습니다. MongoDB Shell의 대체 솔루션을 알아보려면 스크립트 쓰기를 참조하세요.
이 작업에 대하여
system.js
를 사용할 때는 다음 권장 사항을 고려하세요.
애플리케이션 로직을 데이터베이스에 저장할 수 없습니다.
MongoDB에서 JavaScript를 실행하려면 성능 제한이 있습니다.
애플리케이션 코드는 애플리케이션 자체와 버전 제어를 공유할 때 가장 효과적으로 사용할 수 있습니다.
단계
함수를 저장하려면 다음 예시와 같이 system.js
컬렉션에 함수를 삽입합니다.
데이터베이스에 JavaScript 함수 저장
데이터베이스에 JavaScript 함수를 저장하려면 다음 필드가 포함된 문서를 삽입하세요.
_id
필드는 함수 이름을 보유하며 데이터베이스마다 고유하게 설정됩니다.value
필드에는 함수 정의가 포함됩니다.
다음 예시에서는 system.js
컬렉션에 echo
함수를 만듭니다.
db.system.js.insertOne( { _id: "echo", value : function(x) { return x; } } )
다음 예시에서는 system.js
컬렉션에 isEven
함수를 만듭니다.
db.system.js.insertOne( { _id: "isEven", value: function (num) { return num % 2 === 0; } } )
BSON 유형으로 저장된 이러한 함수는 mapReduce
및 $where
등 모든 JavaScript 맥락에서 사용할 수 있습니다.
참고
더 이상 사용되지 않는 BSON 유형 JavaScript(범위 포함)로 저장된 함수는 mapReduce
및 $where
에서 사용할 수 없습니다.
저장된 JavaScript 함수 실행
다음 코드 예시는
system.js
에 저장된echo
함수를 실행합니다.echo("test") test 다음 코드 예시에서는
test_numbers
컬렉션의$where
연산자에서system.js
에 저장된isEven
함수를 실행합니다.db.test_numbers.find({ $where: function () { return isEven(this.value); } }) { "_id" : ObjectId("668d7be41b55bec1bf191499"), "value" : 2 } { "_id" : ObjectId("668d7be41b55bec1bf19149b"), "value" : 4 } { "_id" : ObjectId("668d7be41b55bec1bf19149d"), "value" : 6 }