어디
정의
호환성
다음 환경에서 호스팅되는 배포에 $where
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$where
연산자의 형식은 다음과 같습니다.
{ $where: <string|JavaScript Code> }
참고
$where
은(는) 더 이상 사용되지 않는 범위가 있는 BSON types JavaScript 코드(BSON Type 15)를 지원하지 않습니다. $where
연산자는 BSON type 문자열(BSON type 2) 또는 BSON types JavaScript(BSON type 13)만 지원합니다. $where
범위가 있는 BSON type JavaScript의 사용은 MongoDB 4 이후 더 이상 사용되지 않습니다.2.1.
참고
선호하는 집계 대안
연산자를 사용하면 쿼리 언어 내에서 애그리게이션 $expr
표현식 을 사용할 수 있습니다. 제공된 $function
파이프라인 연산자 가 애플리케이션의 요구 사항을 충족할 수 없는 경우 및 을(를)$accumulator
사용하면 JavaScript에서 사용자 지정 집계 표현식을 정의할 수 있습니다.
사용 가능한 집계 연산자가 주어집니다.
JavaScript를 사용하지 않는 애그리게이션 연산자(즉, 비
$function
및 비$accumulator
연산자)와 함께$expr
를 사용하는 것은 JavaScript를 실행하지 않기 때문에$where
보다 빠르며 가능하면 선호되어야 합니다.그러나 사용자 지정 표현식을 만들어야 하는 경우
$where
보다$function
을 사용하는 것이 좋습니다
행동
사용 가능한 JavaScript 속성 및 함수
map-reduce operations
및 $where
연산자 표현식은mongosh
에서 사용할 수 있는 db
와 같은 특정 전역 함수 또는 속성에 액세스 할 수 없습니다
다음 JavaScript 함수 및 속성 은 map-reduce operations
및 $where
연산자 표현식에 사용할 수 있습니다.
사용 가능한 속성 | 사용 가능한 기능 | |
---|---|---|
args MaxKey MinKey | assert() BinData() DBPointer() DBRef() doassert() emit() gc() HexData() hex_md5() isNumber() isObject() ISODate() isString() | Map() MD5() NumberInt() NumberLong() ObjectId() print() printjson() printjsononeline() sleep() Timestamp() tojson() tojsononeline() tojsonObject() UUID() version() |
elemMatch
$where
쿼리 연산자는 최상위 문서에만 적용합니다. $where
쿼리 연산자는 중첩된 문서(예: $elemMatch
쿼리) 내부에서는 작동하지 않습니다.
고려 사항
전역 변수를 사용하지 마십시오.
$where
이(가) JavaScript를 평가하며 인덱스를 활용할 수 없습니다. 따라서 표준 MongoDB 연산자(예:$gt
,$in
)를 사용하여 쿼리를 표현하면 쿼리 성능이 향상됩니다.일반적으로
$where
는 다른 연산자를 사용하여 쿼리를 표현할 수 없는 경우에만 사용해야 합니다.$where
사용해야 하는 경우 결과 집합을 필터링하기 위해 하나 이상의 다른 표준 쿼리 연산자를 포함해 보세요.$where
만 사용하려면 컬렉션 스캔이 필요합니다.
일반적인 비$where
쿼리 문을 사용하면 다음과 같은 성능 이점이 있습니다.
MongoDB는 문
$where
전에 쿼리의 이외의 구성$where
요소를 평가합니다. 이(가)$where
아닌 문이 문서와 일치하지 않는 경우, MongoDB는$where
을(를) 사용하여 쿼리 평가를 수행하지 않습니다.$where
이(가) 아닌 쿼리 문은 인덱스를 사용할 수 있습니다.
JavaScript 활성화
$where
(또는 $function
, $accumulator
또는 mapReduce
)를 사용하려면 서버 측 스크립팅을 활성화해야 합니다(기본값).
그러나 이러한 작업을 사용하지 않는 경우 서버 쪽 스크립팅을 사용하지 않도록 설정합니다.
mongod
인스턴스의 경우security.javascriptEnabled
구성 옵션 또는 명령줄 옵션을 참조하세요--noscripting
.mongos
인스턴스의 경우security.javascriptEnabled
구성 옵션 또는--noscripting
명령줄 옵션을 참조하세요.
또한 ➤ 보안 구성 옵션으로 MongoDB 실행을 참조하세요.
지원되지 않는 배열 및 문자열 함수
MongoDB 6.0 는 서버 측 JavaScript, $accumulator
, $function
및 $where
표현식에 사용되는 내부 JavaScript 엔진을 MozJS-60 에서 MozJS-91 로 업그레이드합니다. MozJS-60 에 존재했던 사용 중단된 몇 가지 비표준 배열과 문자열 함수가 MozJS-91 에서 제거되었습니다.
제거된 배열 및 문자열 함수의 전체 목록은 6.0 호환성 정보를 참조하십시오.
예제
players
collection에 있는 다음 문서를 고려하세요.
db.players.insertMany([ { _id: 12378, name: "Steve", username: "steveisawesome", first_login: "2017-01-01" }, { _id: 2, name: "Anya", username: "anya", first_login: "2001-02-02" } ])
다음 예제에서는 $where
및 hex_md5()
JavaScript 함수를 사용하여 name
필드의 값을 MD5 해시와 비교하고 일치하는 문서를 반환합니다.
db.players.find( { $where: function() { return (hex_md5(this.name) == "9b53e667f30cd329dca1ec9e6a83e994") } } );
이 연산은 다음과 같은 결과를 반환합니다.
{ "_id" : 2, "name" : "Anya", "username" : "anya", "first_login" : "2001-02-02" }
또는 $expr
및 $function
를 사용하여 이전 예제를 다시 작성할 수 있습니다. 애그리게이션 연산자 $function
를 사용하여 JavaScript에서 사용자 지정 애그리게이션 표현식을 정의할 수 있습니다. $function
및 db.collection.find()
의 기타 애그리게이션 연산자에 액세스하려면 $expr
과 함께 사용합니다.
db.players.find( {$expr: { $function: { body: function(name) { return hex_md5(name) == "9b53e667f30cd329dca1ec9e6a83e994"; }, args: [ "$name" ], lang: "js" } } } )
사용자 지정 표현식을 만들어야 하는 경우$where
보다 $function
을 사용하는 것이 좋습니다