같음
정의
equals
equals
연산자는 필드가 지정한 값과 일치하는지 여부를 확인합니다.equals
는 다음 데이터 유형에 대한 쿼리를 지원합니다.equals
연산자를 사용하여 배열의 부울, objectId, 숫자, 날짜 및 문자열(token
유형으로 인덱싱됨)을 쿼리할 수 있습니다. 배열의 요소 중 하나 이상이equals
연산자의 '값' 필드와 일치하면 Atlas Search는 결과 집합에 문서를 추가합니다.참고
equals
연산자는 소수점 이하 15자리까지 숫자를 지원합니다. 문서 또는 쿼리에 소수점 이하 자릿수가 추가되면 정밀도 문제 또는 쿼리 부정확성이 발생할 수 있습니다.
구문
equals
의 구문은 다음과 같습니다:
{ $search: { "index": <index name>, // optional, defaults to "default" "equals": { "path": "<field-to-search>", "value": <boolean-value>|<objectId>|<number>|<date>|<string>, "score": <score-options> } } }
옵션
equals
는 다음 용어를 사용하여 쿼리를 구성합니다:
필드 | 유형 | 설명 | 필수 사항입니다. |
---|---|---|---|
| 문자열 | 검색할 인덱싱된 필드입니다. | 네 |
| 쿼리할 값입니다. | 네 | |
| 객체 | 일치하는 검색어 결과에 할당할 점수입니다. 다음 옵션 중 하나를 사용하여 기본 점수를 수정합니다.
쿼리에서 | no |
채점 동작
기본적으로 equals
는 constant
점수를 사용합니다. 일치하는 각 문서는 1
의 점수를 받습니다.
배열에서 값을 쿼리할 때, Atlas Search는 배열 내 쿼리와 일치하는 값의 개수에 따라 일치하는 결과의 점수를 수정하지 않습니다. 점수는 배열 내부의 일치 항목 수에 관계없이 단일 일치 항목과 동일합니다.
채점에 대한 예시는 예시 섹션을 참조하세요.
예시
샘플 컬렉션
이 페이지의 예시에서는 다음 문서가 포함된 users
라는 컬렉션을 사용합니다.
참고
다음 예제에서는 JavaScript 형식을 사용합니다. mongosh
를 사용하여 이러한 문서를 이 형식으로 추가할 수 있습니다. Atlas UI에는 JSON 형식이 필요합니다.
db.users.insertMany([ { "_id" : ObjectId("5ed698faa1199b471010d70c"), "name" : "Jim Hall", "verified_user" : true, "account" : { "new_user" : true, "active_user" : true }, "teammates" : [ ObjectId("5ed6990aa1199b471010d70d"), ObjectId("59b99dbdcfa9a34dcd7885c8") ], "region" : "East", "account_created" : ISODate("2021-12-12T10:18:27.000+00:00"), "employee_number" : 257, "uuid" : UUID("fac32260-b511-4c69-8485-a2be5b7dda9e"), "job_title": "engineer" }, { "_id" : ObjectId("5ed6990aa1199b471010d70d"), "name" : "Ellen Smith", "verified_user" : true, "account" : { "new_user" : false, "active_user" : true }, "teammates" : [ ObjectId("5a9427648b0beebeb69537a5"), ObjectId("59b99dbdcfa9a34dcd7881d1") ], "region" : "Southwest", "account_created" : ISODate("2022-05-04T05:01:08.000+00:00"), "employee_number" : 258, "job_title": null }, { "_id" : ObjectId("5ed6994fa1199b471010d70e"), "name" : "Fred Osgood", "verified_user" : false, "account" : { "new_user" : false, "active_user" : false }, "teammates" : [ ObjectId("5a9427648b0beebeb69589a1"), ObjectId("59b99dbdcfa9a34dcd7897d3") ], "region" : "Northwest", "account_created" : ISODate("2022-01-19T08:22:15.000+00:00"), "employee_number" : 259, "job_title": null } ])
{ "_id" : ObjectId("5ed698faa1199b471010d70c"), "name" : "Jim Hall", "verified_user" : true, "account" : { "new_user" : true, "active_user" : true }, "teammates" : [ ObjectId("5ed6990aa1199b471010d70d"), ObjectId("59b99dbdcfa9a34dcd7885c8") ], "region" : "East", "account_created" : ISODate("2021-12-12T10:18:27.000+00:00"), "employee_number" : 257, "uuid" : UUID("fac32260-b511-4c69-8485-a2be5b7dda9e"), "job_title": "engineer" }
{ "_id" : ObjectId("5ed6990aa1199b471010d70d"), "name" : "Ellen Smith", "verified_user" : true, "account" : { "new_user" : false, "active_user" : true }, "teammates" : [ ObjectId("5a9427648b0beebeb69537a5"), ObjectId("59b99dbdcfa9a34dcd7881d1") ], "region" : "Southwest", "account_created" : ISODate("2022-05-04T05:01:08.000+00:00"), "employee_number" : 258, "job_title": null }
{ "_id" : ObjectId("5ed6994fa1199b471010d70e"), "name" : "Fred Osgood", "verified_user" : false, "account" : { "new_user" : false, "active_user" : false }, "teammates" : [ ObjectId("5a9427648b0beebeb69589a1"), ObjectId("59b99dbdcfa9a34dcd7897d3") ], "region" : "Northwest", "account_created" : ISODate("2022-01-19T08:22:15.000+00:00"), "employee_number" : 259, "job_title": null }
샘플 인덱스
users
컬렉션은 다음 인덱스 정의로 인덱싱됩니다.
{ "mappings": { "dynamic": true, "fields": { "name": { "type": "token", "normalizer": "lowercase" } } } }
인덱스 정의는 다음을 지정합니다.
동적으로 인덱싱 가능한 모든 필드를 자동으로 인덱싱합니다.
name
필드를token
유형으로 인덱싱하여equals
연산자를 사용한 문자열 검색을 지원합니다.
Atlas Search 인덱스를 생성하는 방법은 Atlas Search 인덱스 생성을 참조하세요.
기본 예시 쿼리
부울 예시
다음 예시에서는 equals
연산자를 사용하여 users
컬렉션에서 verified_user
필드가 true
로 설정된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "verified_user", "value": true } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
위의 쿼리는 다음과 같은 결과를 반환합니다:
{ "name" : "Jim Hall", "score" : 1 } { "name" : "Ellen Smith", "score" : 1 }
"Jim Hall" 및 "Ellen Smith"에 대한 문서는 verified_user
필드가 true
로 설정되어 있기 때문에 각각 1
의 점수를 받습니다.
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 account.new_user
필드에 부울 값 true
가 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "account.new_user", "value": true } } } ])
위 쿼리는 'Jim Hall'에 대한 문서를 반환하는데, 이는 해당 문서가 account
객체에 "new_user": true
를 포함하고 있기 때문입니다.
ObjectId 예시
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 teammates
필드에 값 ObjectId("5a9427648b0beebeb69589a1")
가 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69589a1") } } } ])
앞의 쿼리는 'Fred Osgood'에 대한 문서를 반환하는데, 이는 해당 문서가 teammates
배열에 ObjectId("5a9427648b0beebeb69589a1")
를 포함하고 있기 때문입니다.
날짜 예시
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 account_created
필드에 ISODate("2022-05-04T05:01:08.000+00:00")
과 일치하는 값이 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "account_created", "value": ISODate("2022-05-04T05:01:08.000+00:00") } } } ])
앞의 쿼리는 "Ellen Smith"에 대한 문서를 반환하는데, 이는 해당 문서에 "account_created":
2022-05-04T05:01:08.000+00:00
이 포함되어 있기 때문입니다.
번호 예시
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 employee_number
필드에 259
과 일치하는 값이 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "employee_number", "value": 259 } } } ])
앞의 쿼리는 "Fred Osgood"에 대한 문서를 반환하는데, 이는 해당 문서에 "employee_number":
259
가 포함되어 있기 때문입니다.
문자열 예시
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 name
필드에 Jim Hall
과 일치하는 값이 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "name", "value": "jim hall" } } } ])
이전 쿼리는 'Jim Hall'에 대한 문서를 반환하는데 이는 해당 문서가 name
필드에 Jim Hall
을 포함하고 있기 때문입니다. Atlas Search는 name
필드의 인덱스 정의에 지정된 대로 용어를 소문자로 정규화하기 때문에 소문자 쿼리를 문서의 대문자 값과 일치시킵니다.
UUID 예시
다음 예제에서는 equals
연산자를 사용하여 users
컬렉션에서 uuid
필드에 특정 UUID와 일치하는 값이 포함된 문서를 검색합니다.
db.users.aggregate([ { "$search": { "equals": { "path": "uuid", "value": UUID("fac32260-b511-4c69-8485-a2be5b7dda9e") } } } ])
앞의 쿼리는 "Jim Hall"에 대한 문서를 반환하는데, 이는 해당 문서가 uuid
필드에 지정된 UUID를 포함하고 있기 때문입니다.
Null 예시
다음 예시에서는 equals
연산자를 사용하여 job_title
필드에 null 값이 포함된 문서를 users
컬렉션에서 검색합니다.
db.users.aggregate([ { $search: { "equals": { "path": "job_title", "value": null } } } ])
이전 쿼리는 "Ellen Smith"와 Fred Osgood
에 대한 문서를 반환하는데, 이는 해당 문서가 job_title
필드에 null 값을 포함하고 있기 때문입니다.
복합 예시 쿼리
다음 예에서는 must
, mustNot
, equals
와 함께 복합 연산자를 사용하여 region
필드가 Southwest
이고 verified_user
필드가 false
이 아닌 문서를 검색합니다.
db.users.aggregate([ { "$search": { "compound": { "must": { "text": { "path": "region", "query": "Southwest" } }, "mustNot": { "equals": { "path": "verified_user", "value": false } } } } } ])
위 쿼리는 컬렉션에서 검색 기준을 충족하는 유일한 문서인 "Ellen Smith"에 대한 문서를 반환합니다.
다음 예시 쿼리의 검색 조건은 아래와 같습니다.
verified_user
필드를true
로 설정해야 합니다.다음 중 하나가 참이어야 합니다.
teammates
배열에ObjectId("5ed6990aa1199b471010d70d")
값이 포함되어 있음region
필드가Northwest
로 설정되어 있음
db.users.aggregate([ { "$search": { "compound": { "must": { "equals": { "path": "verified_user", "value": true } }, "should": [ { "equals": { "path": "teammates", "value": ObjectId("5ed6990aa1199b471010d70d") } }, { "text": { "path": "region", "query": "Northwest" } } ], "minimumShouldMatch": 1 } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
위의 쿼리는 다음과 같은 결과를 반환합니다:
{ "name" : "Jim Hall", "score" : 2 }
"Jim Hall"에 대한 문서는 must
절의 요구 사항과 두 개의 should
절 중 첫 번째 절을 충족하므로 2
점수를 받습니다.
복합 쿼리를 사용하여 여러 ObjectID를 검색할 수 있습니다. 다음 예시 쿼리에서는 compound
연산자와 should
절을 사용하여 세 개의 서로 다른 ObjectID를 검색하며, 그 중 적어도 두 개는 쿼리를 충족하는 것으로 나타나야 합니다.
db.users.aggregate([ { "$search": { "compound": { "should": [ { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69537a5") } }, { "equals": { "path": "teammates", "value": ObjectId("59b99dbdcfa9a34dcd7881d1") } }, { "equals": { "path": "teammates", "value": ObjectId("5a9427648b0beebeb69579d0") } } ], "minimumShouldMatch": 2 } } }, { "$project": { "name": 1, "_id": 0, "score": { "$meta": "searchScore" } } } ])
위의 쿼리는 다음과 같은 결과를 반환합니다:
{ "name" : "Ellen Smith", "score" : 2 }
"Ellen Smith"에 대한 문서는 teammates
배열에 지정된 ObjectID 중 두 개가 포함되어 있기 때문에 2
점수를 받습니다.