Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

같음

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 채점 동작
  • 예제
  • 샘플 컬렉션
  • 샘플 인덱스
  • 기본 예제 쿼리
  • 부울 예제
  • ObjectId 예제
  • 날짜 예제
  • 번호 예제
  • 문자열 예제
  • UUID 예시
  • Null 예시
  • 복합 예제 쿼리
equals

equals 연산자는 필드가 지정한 값과 일치하는지 여부를 확인합니다. equals는 다음 데이터 유형에 대한 쿼리를 지원합니다.

  • 부울

  • objectId

  • 숫자( int32, int64double포함)

  • 날짜

  • 문자열, Atlas Search 토큰 유형으로 인덱싱됨

  • uuid

  • null

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 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필수 사항입니다.
path
문자열
검색할 인덱싱된 필드입니다.
value
boolean, objectId, number, date, string, uuid 또는 null 입니다.
쿼리할 값입니다.
score
객체

일치하는 검색어 결과에 할당할 점수입니다. 다음 옵션 중 하나를 사용하여 기본 점수를 수정합니다.

  • boost결과 점수에 주어진 숫자를 곱합니다.

  • constant결과 점수를 주어진 숫자로 바꿉니다.

  • function결과 점수를 주어진 표현식으로 대체합니다.

쿼리에서 score 사용에 대한 자세한 내용은 결과에서 문서 채점하기를 참조하십시오.

no

기본적으로 equalsconstant 점수를 사용합니다. 일치하는 각 문서는 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를 포함하고 있기 때문입니다.

다음 예제에서는 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 필드의 인덱스 정의에 지정된 대로 용어를 소문자로 정규화하기 때문에 소문자 쿼리를 문서의 대문자 값과 일치시킵니다.

다음 예제에서는 equals 연산자를 사용하여 users 컬렉션에서 uuid 필드에 특정 UUID와 일치하는 값이 포함된 문서를 검색합니다.

db.users.aggregate([
{
"$search": {
"equals": {
"path": "uuid",
"value": UUID("fac32260-b511-4c69-8485-a2be5b7dda9e")
}
}
}
])

앞의 쿼리는 "Jim Hall"에 대한 문서 를 반환하는데, 이는 해당 문서에 uuid 필드에 지정된 UUID가 포함되어 있기 때문입니다.

다음 예제에서는 equals 연산자를 사용하여 users 컬렉션에서 job_title 필드에 null 값이 포함된 문서를 검색합니다.

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 점수를 받습니다.

돌아가기

embeddedDocument