AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

$where (쿼리 자 연산자)

$where

연산자 사용하여 $where JavaScript 표현식 포함된 문자열 또는 전체 JavaScript 함수를 쿼리 시스템에 전달합니다. 는 $where 더 큰 유연성을 제공하지만 데이터베이스 컬렉션 의 각 문서 에 대해 JavaScript 표현식 또는 함수를 처리해야 합니다. 또는 를 사용하여 JavaScript 표현식 또는 함수에서 문서 this obj참조합니다.

다음 환경에서 호스팅되는 배포에 $where 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

연산자 $where 형식은 다음과 같습니다.

{ $where: <string|JavaScript Code> }

참고

$where는 더 이상 사용되지 않는 BSON 유형 범위의 JavaScript 코드(BSON 유형 15)를 지원하지 않습니다. $where 연산자는 BSON 유형 문자열(BSON 유형 2) 또는 BSON 유형 JavaScript(BSON 유형 13)만 지원합니다. $where 범위가 있는 BSON types JavaScript의 사용은 MongoDB 4.2.1 이후 더 이상 사용되지 않습니다.

참고

선호하는 집계 대안

$expr 연산자를 사용하면 쿼리 언어 내에서 집계 표현식을 사용할 수 있습니다. $function 및 $accumulator를 사용하면 제공된 파이프라인 연산자가 애플리케이션의 요구 사항을 충족할 수 없는 경우 사용자가 JavaScript에서 사용자 지정 집계 표현식을 정의할 수 있습니다.

사용 가능한 집계 연산자가 주어집니다.

  • JavaScript 사용하지 않는 집계 연산자(즉, 비$function및 비$accumulator연산자)와 함께$expr를 사용하는 것은 JavaScript 실행하지 않기 때문에$where보다 빠르며 가능하면 선호되어야 합니다.

  • 그러나 사용자 지정 표현식을 만들어야 하는 경우$function 보다 를 사용하는 $where 것이 좋습니다.

map-reduce operations 및 $where 연산자 표현식은에서 db 사용할 수 있는 같은 특정 전역 함수 또는 속성에 액세스할 mongosh 수 없습니다.

다음 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()

$where 쿼리 연산자 최상위 문서에만 적용 .$where 쿼리 연산자 중첩된 문서($elemMatch 인스턴스: 쿼리) 내부에서는 작동하지 않습니다.

  • 전역 변수를 사용하지 마십시오.

  • $where이(가 ) JavaScript 평가하며 인덱스를 활용할$in 수 없습니다. 따라서 표준 MongoDB 연산자(예:, )를 사용하여 쿼리 를 표현하면 쿼리 성능이 향상됩니다. $gt

  • 일반적으로 는 $where 다른 연산자 사용하여 쿼리 표현할 수 없는 경우에만 사용해야 $where 합니다. 를 사용해야 하는 경우 결과 설정하다 필터하다 하기 위해 하나 이상의 다른 표준 쿼리 연산자 포함해 보세요.$where 만 사용하려면 컬렉션 스캔 이 필요합니다.

일반적인 비$where 쿼리 문을 사용하면 다음과 같은 성능 이점이 있습니다.

  • MongoDB 문$where 전에 쿼리 의 이외의 구성 $where 요소를 평가합니다. 이(가)$where 아닌 문이 문서와 일치하지 않는 경우 MongoDB 를 사용하여 쿼리 평가를 수행하지 $where 않습니다.

  • 이(가) 아닌 쿼리 문은$where 인덱스사용할 수 있습니다.

$where (또는 $function, $accumulator 또는 mapReduce)를 사용하려면 서버 사이드 스크립팅을 활성화해야 합니다(기본값).

그러나 이러한 작업을 사용하지 않는 경우 서버 쪽 스크립팅을 사용하지 않도록 설정합니다.

또한 ➤ 보안 구성 옵션으로 MongoDB 실행을 참조하세요.

MongoDB 6.0 은 서버 측 JavaScript ,, $accumulator $function및 표현식에 사용되는 $where 내부 JavaScript 엔진 MozJS- 에서60 MozJS-91 로 업그레이드합니다. MozJS- 에 존재했던 사용 중단된 몇 가지 비표준 배열 및 문자열 함수가60 MozJS-91 에서 제거되었습니다.

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을 사용하여 이전 예시를 다시 작성할 수 있습니다. JavaScript에서 집계 연산자 $function을 사용해 사용자 지정 집계 표현식을 정의할 수 있습니다. db.collection.find()에서 $function과 다른 집계 연산자에 액세스하려면 $expr를 함께 사용하세요.

db.players.find( {$expr: { $function: {
body: function(name) { return hex_md5(name) == "9b53e667f30cd329dca1ec9e6a83e994"; },
args: [ "$name" ],
lang: "js"
} } } )

사용자 지정 표현식을 만들어야 하는 경우 보다 를 사용하는$function 것이 $where 좋습니다.