$eq
$eq
동일성 조건을 지정합니다.
$eq
연산자는 필드 값이 지정된 값과 같은 문서를 일치시킵니다.
호환성
다음 환경에서 호스팅되는 배포에 $eq
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$eq
연산자의 형식은 다음과 같습니다.
{ <field>: { $eq: <value> } }
$eq
연산자를 지정하는 것은 <value>
가 정규식인 경우를 제외하고 { field: <value> }
형식을 사용하는 것과 동일합니다. 아래에서 예시를 참조하세요.
행동
비교 순서
다양한 BSON types 값을 비교하려면 지정된 BSON 비교순서를 참조하십시오.
문서 값 일치
지정된 <value>
이 문서인 경우 문서의 필드 순서가 중요합니다.
배열 값 일치
지정된 <value>
가 배열인 경우 MongoDB는 <field>
가 배열과 정확히 일치하거나 <field>
에 배열과 정확히 일치하는 요소가 포함된 문서를 일치시킵니다. 요소의 순서가 중요합니다. 예시를 보려면 배열 값과 동일을 참조하세요.
정규식 일치
{ field: <value> }
표현식은 <value>
에서 일치하는 항목을 암시적으로 지정합니다. MongoDB는 암시적 일치를 보다 명시적인 형태로 변환합니다.
특정 문자열처럼 <value>
가 고정되면 표현식은 $eq
연산자 { field: { $eq: <value> } }
를 사용하는 것과 같게 됩니다.
<value>
가 정규식인 경우 $regex
연산자 { field: { $regex: <value> } }
를 사용하여 명령문을 확장합니다.
이 동작을 설명하는 예시는 정규식 일치 동작을 참조하세요.
보안에 미치는 영향
악의적으로 구성된 쿼리로 인한 문제를 방지하려면 항상 사용자 제공 입력과 함께 명시적인 { field: { $eq: <value> } }
형식을 사용하십시오.
예제
다음 예시에서는 다음 문서가 포함된 inventory
컬렉션을 쿼리합니다.
db.inventory.insertMany( [ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ] )
지정된 값과 동일
다음 예시는 inventory
컬렉션을 쿼리하여 qty
필드 값이 20
인 모든 문서를 선택합니다.
db.inventory.find( { qty: { $eq: 20 } } )
해당 쿼리는 다음과 같습니다.
db.inventory.find( { qty: 20 } )
두 쿼리 모두 다음 문서와 일치합니다.
[ { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
내장된 문서의 필드가 값과 같음
다음 예시에서는 inventory
컬렉션을 쿼리하여 item
문서의 name
필드 값이 "ab"
인 모든 문서를 선택합니다. 내장된 문서의 필드에 조건을 지정하려면 점 표기법을 사용합니다.
db.inventory.find( { "item.name": { $eq: "ab" } } )
해당 쿼리는 다음과 같습니다.
db.inventory.find( { "item.name": "ab" } )
두 쿼리 모두 다음 문서와 일치합니다.
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] } ]
배열 요소가 특정 값과 동일
다음 예시에서는 inventory
컬렉션을 쿼리하여 tags
배열에 값이 "B"
[1]인 요소가 포함된 모든 문서를 선택합니다.
db.inventory.find( { tags: { $eq: "B" } } )
해당 쿼리는 다음과 같습니다.
db.inventory.find( { tags: "B" } )
두 쿼리 모두 다음 문서와 일치합니다.
[ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] } ]
[1] | 쿼리는 tags 필드의 값이 문자열 "B" 인 문서도 일치합니다. |
배열 값과 동일
다음 예시에서는 inventory
컬렉션을 쿼리하여 tags
배열이 지정된 배열과 정확히 같거나 tags
배열에 배열과 같은 요소가 포함된 모든 문서를 [ "A", "B" ]
선택합니다.
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
해당 쿼리는 다음과 같습니다.
db.inventory.find( { tags: [ "A", "B" ] } )
두 쿼리 모두 다음 문서와 일치합니다.
[ { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } ]
정규식 일치 동작
다음 예제는 암시적 정규 표현식 일치와 명시적 정규 표현식 일치 간의 동작 차이를 보여줍니다. 다음과 같은 문서가 포함된 collection을 생각해 보세요.
db.companies.insertMany( [ { _id: 001, company: "MongoDB" }, { _id: 002, company: "MongoDB2" } ] )
- 문자열에서 $eq 일치
문자열은 암시적 일치이든
$eq
의 명시적 사용이든 동일한 값을 반환하도록 확장됩니다. 이 두 쿼리 모두:db.collection.find( { company: "MongoDB" }, {_id: 0 }) db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } ) 다음 결과를 반환합니다.
[ { company: "MongoDB" } ] - 정규식의 $eq 일치
$eq
및 정규 표현식을 사용하는 명시적 쿼리는 오로지 정규 표현식인 객체만 일치합니다.company
필드의 값이 문자열이므로 예시 쿼리에서는 아무 것도 반환하지 않습니다.db.companies.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } ) - 정규 표현식 일치
정규 표현식과 암시적으로 일치하는 쿼리는
$regex
연산자를 사용하여 쿼리하는 것과 같습니다. 이 두 쿼리 모두:db.companies.find( { company: /MongoDB/ }, {_id: 0 }) db.companies.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } ) 동일한 결과를 반환합니다.
[ { company: "MongoDB" }, { company: "MongoDB2" } ]