Docs Menu
Docs Home
/
MongoDB 매뉴얼

서버에 JavaScript 함수 저장

이 페이지의 내용

  • 시작하기 전에
  • 이 작업에 대하여
  • 단계

중요

MongoDB 8.0부터 서버 측 JavaScript는 더 이상 사용되지 않습니다. system.js 기능은 일부 기능에서 작동하지 않을 수 있습니다.

재사용을 위해 JavaScript 함수를 저장할 수 있는 특별 시스템 컬렉션(system.js)이 있습니다.

이 작업에서는 레거시 mongo 셸을 사용하여 system.js 컬렉션에서 서버 측 함수를 로드합니다. 해당 버전의 셸은 더 이상 지원되지 않습니다. MongoDB Shell의 대체 솔루션을 알아보려면 스크립트 쓰기를 참조하세요.

system.js를 사용할 때는 다음 권장 사항을 고려하세요.

  • 애플리케이션 로직을 데이터베이스에 저장할 수 없습니다.

  • MongoDB에서 JavaScript를 실행하려면 성능 제한이 있습니다.

  • 애플리케이션 코드는 애플리케이션 자체와 버전 제어를 공유할 때 가장 효과적으로 사용할 수 있습니다.

함수를 저장하려면 다음 예시와 같이 system.js 컬렉션에 함수를 삽입합니다.

1
db.test_numbers.insertMany([
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 },
{ value: 5 },
{ value: 6 }
])
2

데이터베이스에 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에서 사용할 수 없습니다.

3
db.loadServerScripts()
4
  1. 다음 코드 예시는 system.js에 저장된 echo 함수를 실행합니다.

    echo("test")
    test
  2. 다음 코드 예시에서는 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 }

다음

MongoDB란 무엇입니까?