중요
맵 리듀스는 MongoDB 5.0부터 더 이상 사용되지 않습니다.
MongoDB는 JavaScript 코드의 서버측 실행을 수행하는 다음 연산자를 제공합니다.
$where문서를 쿼리하기 위해 JavaScript 표현식이나 함수를 평가하는 연산자입니다.사용자가 사용자 지정 집계 표현식을 정의할 수 있는
$accumulator및$function집계 작업입니다.
.js 실행 MongoDB Shell을 사용하는 파일
JavaScript(.js) 파일을 mongosh 에 지정하여 서버에서 파일을 실행할 수 있습니다. 이는 일괄 관리 작업을 수행하는 데 유용한 기술입니다. 서버에서 mongosh 를 실행하고 로컬 호스트 인터페이스를 통해 연결하면 지연 시간이 짧고 연결이 빠릅니다.
서버 측 JavaScript 비활성화
mongod 또는 mongos에 대한 모든 서버 측 JavaScript 실행을 비활성화하려면 다음 중 하나를 수행할 수 있습니다.
명령줄에서
--noscripting옵션을 전달합니다.mongod --noscripting및mongos --noscripting을(를) 참조하세요.설정 파일에서
security.javascriptEnabled을(를) false로 설정합니다.
행동
MongoDB의 자바스크립트
서버 측 메서드는 JavaScript를 사용하지만, 대부분의 MongoDB와의 상호 작용은 JavaScript를 사용하지 않고 상호 작용하는 애플리케이션의 언어로 된 관용적 드라이버를 사용합니다.
동시성
동시성 정보는 개별 메서드 또는 연산자 설명서를 참조하세요. 동시성 테이블도 참조합니다.
지원되지 않는 배열 및 문자열 함수
MongoDB 6.0 은 서버 측 JavaScript, $accumulator, $function 및 $where 표현식에 사용되는 내부 JavaScript 엔진 을 MozJS-60 에서 MozJS-91 로 업그레이드합니다. MozJS-60 에 존재했던 사용 중단된 몇 가지 비표준 배열 및 string 함수가 MozJS-91에서 제거되었습니다.
Unavailable on ppc64le
MongoDB 9.0부터는 ppc64le 아키텍처에서 서버 측 JavaScript를 사용할 수 없습니다. ppc64le 용 mongod 및 mongos 바이너리에는 JavaScript 엔진이 포함되어 있지 않습니다. 그 결과 $where, $accumulator, $function 및 맵 리듀스 작업이 해당 아키텍처에서 실패합니다. 설정 파일 설정이나 명령줄 옵션을 사용하여 ppc64le에서 서버 측 JavaScript를 활성화할 수 없습니다.
이러한 작업을 실행하려면 JavaScript 엔진이 포함된 아키텍처의 배포서버를 사용하세요. 서버 측 JavaScript가 필요 없는 집계 파이프라인 단계 및 연산자를 사용하도록 작업을 다시 작성할 수도 있습니다.
날짜 작업은 UTC를 사용합니다
MongoDB 9.0부터 서버 측 JavaScript는 mongod 호스팅하다 시간 구역와 관계없이 UTC로 로컬 Date 작업을 평가합니다. Date.prototype.getHours(), 로컬 생성자 및 세터, 날짜를 string으로 변환하는 작업은 모두 UTC를 사용합니다. 저장 BSON 날짜 값은 Date.prototype.getTime(), Date.prototype.toISOString() 및 getUTC*() 메서드와 마찬가지로 변경되지 않습니다.
지정된 시간대의 날짜를 평가하려면 $hour와 같은 집계 날짜 연산자를 명시적 timezone 인수와 함께 사용하세요. JavaScript에서 로컬 Date 메서드를 사용하지 마세요. 업그레이드 지침은 MongoDB 9.0의 호환성 변경 사항을 참조하세요.
SELinux 고려 사항
SELinux를 사용하는 경우 서버 측 JavaScript가 필요한 MongoDB 작업을 수행하면 segfault 오류가 발생합니다. 서버 측 JavaScript 실행을 비활성화하려면 서버 측 JavaScript 비활성화를 참조하세요.