조회 연산자

연산자는 이름 필드에서 달러 부호($) 접두부의 사용을 통해 식별됩니다.

선택기 구문에는 두 가지 코어 유형의 연산자가 포함되어 있습니다.

  • 조합 연산자
  • 조건 연산자

일반적으로 조합 연산자는 선택의 최상위 레벨에서 적용됩니다. 이 연산자는 조건을 결합하거나 조건의 조합을 하나의 선택기로 작성하기 위해 사용됩니다.

모든 명시적 연산자의 양식은 다음과 같습니다.

{
	"$operator": "argument"
}

명시적 연산자가 없는 선택기에는 암시적 연산자가 포함된 것으로 간주됩니다. 정확한 암시적 연산자는 선택기 표현식의 구조를 통해 판별됩니다.

암시적 연산자

다음 목록에는 두 개의 암시적 연산자가 표시되어 있습니다.

  • "Equality"
  • "그리고"

선택기에서 JSON 값이 포함되어 있지만 연산자가 포함되어 있지 않은 필드는 모두 등식 조건으로 간주됩니다. 암시적 등식 테스트는 필드 및 서브필드에도 적용됩니다.

조건 연산자에 대한 인수가 아닌 JSON 오브젝트는 모두 각각의 필드에 있는 암시적 $and 연산자입니다.

다음과 같이 year 필드의 값이 2010보다 큰 문서와 일치시키기 위한 연산자를 사용하는 선택기 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gt": 2010
		}
	}
}

다음 예제에서 일치하는 문서에는 director라는 필드가 포함되어 있어야 하며 해당 필드의 값이 정확히 Lars von Trier와 동일해야 합니다.

다음과 같이 암시적 등식 연산자 예제를 참조하십시오.

{
	"director": "Lars von Trier"
}

다음 예제에 표시된 것과 같이 등식 연산자를 명시적으로 작성할 수도 있습니다.

다음과 같이 명시적 등식 연산자 예제를 참조하십시오.

{
	"director": {
		"$eq": "Lars von Trier"
	}
}

서브필드를 사용하는 다음 예제에서 일치하는 문서의 imdb 필드에는 반드시 서브필드 rating이 포함되어 있어야 하며 이 서브필드의 값이 반드시 8과 동일해야 합니다.

다음과 같이 서브필드 테스트에 적용되는 암시적 연산자 예제를 참조하십시오.

{
	"imdb": {
		"rating": 8
	}
}

등식 연산자를 명시적으로 작성할 수 있습니다.

다음과 같이 명시적 등식 연산자 예제를 참조하십시오.

{
	"selector": {
		"imdb": {
			"rating": { "$eq": 8 }
		}
	}
}

다음과 같이 전체 텍스트 인덱싱에 사용되는 $eq 연산자 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$eq": 2001
		}
	},
	"sort": [
		"title:string"
	],
	"fields": [
		"title"
	]
}

다음과 같이 $eq 필드에 대해 인덱싱된 데이터베이스에 사용되는 year 연산자 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$eq": 2001
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

다음 예제에서는 director 필드가 있어야 하고 Lars von Trier* 값을 보유해야 하며, *year 필드가 있어야 하고 2003 값을 보유해야 합니다.

다음과 같이 암시적 $and 연산자 예제를 참조하십시오.

{
	"director": "Lars von Trier",
	"year": 2003
}

$and 연산자 및 등식 연산자를 모두 명시적으로 작성할 수 있습니다.

다음과 같이 명시적 $and$eq 연산자를 사용하는 예제를 참조하십시오.

{
	"$and": [
		{
			"director": {
				"$eq": "Lars von Trier"
			}
		},
		{
			"year": {
				"$eq": 2003
			}
		}
	]
}

명시적 연산자

$eq(등식) 및 $and(and) 연산자를 제외한 모든 연산자는 명시적으로 표시되어야 합니다.

조합 연산자

조합 연산자는 선택기를 결합하기 위해 사용됩니다. 세 개의 조합 연산자($all, $allMatch$elemMatch)를 통해 JSON 배열 관련 작업은 물론 대부분의 프로그래밍 언어에 존재하는 공통 부울 연산자 관련 작업을 수행할 수 있습니다.

조합 연산자에서는 하나의 인수를 사용합니다. 이 인수는 다른 선택기 또는 선택기의 배열입니다.

조합 연산자
운영자 인수 용도
$all 배열 인수 배열의 모든 요소가 포함된 경우 배열 값을 일치시킵니다.
$allMatch 선택기 지정된 모든 조회 기준과 일치하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다.
$and 배열 배열의 모든 선택기가 일치하는 경우 일치시킵니다.
$elemMatch 선택기 지정된 모든 조회 기준과 일치하는 요소가 하나 이상 존재하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다.
$nor 배열 배열의 선택기가 하나도 일치하지 않을 경우 일치시킵니다.
$not 선택기 선택기가 일치하지 않을 경우 일치시킵니다.
$or 배열 배열의 선택기 중 하나라도 일치하는 경우 일치시킵니다. 모든 선택기에서 동일한 인덱스를 사용해야 합니다.

$all

$all 연산자는 인수 배열의 모든 요소가 포함된 경우 배열 값을 일치시킵니다.

다음과 같이 $all 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"genre": {
			"$all": ["Comedy","Short"]
		}
	},
	"fields": [
		"title",
		"genre"
	],
	"limit": 10
}

$allMatch

$allMatch 연산자는 배열 필드의 모든 요소가 제공된 조회 기준과 일치하는 경우 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다.

다음과 같이 $allMatch 연산자를 사용하는 예제를 참조하십시오.

{
    "genre": {
        "$allMatch": {
          "$eq": "Horror"
        }
    }
}

$and

$and 연산자는 배열의 모든 선택기가 일치하는 경우 일치시킵니다.

다음과 같이 $and 연산자를 사용하는 예제를 참조하십시오.

{
    "selector": {
        "$and": [
            {
                "year": {
                    "$in": [2014, 2015]
                }
            },
            {
                "genre": {
                     "$all": ["Comedy","Short"]
                 }
            }
        ]
    },
    "fields": [
        "year",
        "_id",
        "title"
    ],
    "limit": 10
}

$elemMatch

$elemMatch 연산자는 제공된 조회 기준과 일치하는 요소가 하나 이상 존재하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다.

다음과 같이 $elemMatch 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"genre": {
			"$elemMatch": {
				"$eq": "Horror"
			}
		}
	},
	"fields": [
		"title",
		"genre"
	],
	"limit": 10
}

$nor

$nor 연산자는 선택기가 일치하지 않을 경우 일치시킵니다.

다음과 같이 $nor 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gte": 1900,
			"$lte": 1910
		},
		"$nor": [
			{ "year": 1901 },
			{ "year": 1905 },
			{ "year": 1907 }
		]
	},
	"fields": [
		"title",
		"year"
	]
}

$not

$not 연산자는 선택기가 * 값으로 분석되지 *않을true 경우 일치시킵니다.

다음과 같이 $not 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gte": 1900,
			"$lte": 1903
		},
		"$not": {
			"year": 1901
		}
	},
	"fields": [
		"title",
		"year"
	]
}

$or

$or 연산자는 배열의 선택기 중 하나라도 일치하는 경우 일치시킵니다.

다음과 같이 $or 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": 1977,
		"$or": [
			{ "director": "George Lucas" },
			{ "director": "Steven Spielberg" }
		]
	},
	"fields": [
		"title",
		"director",
		"year"
	]
}

조건 연산자

조건 연산자는 필드에 특정하며 해당 필드에 저장된 값을 평가하기 위해 사용됩니다. 예를 들어 $eq 연산자는 지정된 필드에 제공된 인수와 동일한 값이 포함된 경우 일치시킵니다.

대부분의 프로그래밍 언어에서 공통인 기본 등식 및 부등식 연산자가 지원됩니다. 일부 "메타" 조건 연산자도 사용할 수 있습니다.

일부 조건 연산자에서는 유효한 모든 JSON 컨텐츠가 인수로 허용됩니다. 다른 조건 연산자에서는 인수가 특정 JSON 형식이어야 합니다.

조건 연산자 인수 요구사항
연산자 유형 운영자 인수 용도
(부)등식 $lt 모든 JSON 필드가 인수보다 작습니다.
$lte 모든 JSON 필드가 인수보다 작거나 같습니다.
$eq 모든 JSON 필드가 인수와 같습니다.
$ne 모든 JSON 필드가 인수와 같지 않습니다.
$gte 모든 JSON 필드가 인수보다 크거나 같습니다.
$gt 모든 JSON 필드가 인수보다 큽니다.
오브젝트 $exists 부울 값과 관계 없이 필드가 존재하는지 여부를 확인합니다.
$type 문자열 문서 필드의 유형을 확인합니다. 허용되는 값은 null, boolean, number, string, arrayobject입니다.
배열 $in JSON 값의 배열 제공된 목록에 문서 필드가 존재해야 합니다.
$nin JSON 값의 배열 제공된 목록에 문서 필드가 존재하지 않아야 합니다.
$size 정수 문서에 있는 배열 필드의 길이를 일치시키기 위한 특수 조건입니다. 비배열 필드는 이 조건과 일치하지 않습니다.
기타 $mod [제수, 나머지] 제수 및 나머지는 모두 양의 정수 또는 음의 정수입니다. 정수가 아닌 값을 입력하면 404 오류가 발생합니다. 표현식(field % Divisor == Remainder)이 true이고 문서 필드가 정수인 경우에만 문서를 일치시킵니다.
$regex 문자열 문서 필드에 대해 일치시킬 정규식 패턴입니다. 필드가 문자열 값이고 제공된 정규식과 일치하는 경우에만 일치시킵니다.

정규식은 인덱스에 대해 작동하지 않기 때문에 대규모 데이터 세트를 필터링하는 경우 정규식을 사용해서는 안됩니다. 그러나 이를 partial index <find/partial_indexes>의 제한에 사용할 수 있습니다.

$lt

$lt 연산자는 지정된 필드 컨텐츠가 인수보다 작은 경우 일치시킵니다.

다음과 같이 전체 텍스트 인덱싱에 $lt 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$lt": 1900
		}
	},
	"sort": [
		"year:number",
		"title:string"
	],
	"fields": [
		"year",
		"title"
	]
}

다음과 같이 $lt 필드에 대해 인덱싱된 데이터베이스에 year 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$lt": 1900
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

$lte

$lte 연산자는 지정된 필드 컨텐츠가 인수보다 작거나 같은 경우 일치시킵니다.

다음과 같이 전체 텍스트 인덱싱에 $lte 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$lte": 1900
		}
	},
	"sort": [
		"year:number",
		"title:string"
	],
	"fields": [
		"year",
		"title"
	]
}

다음과 같이 $lte 필드에 대해 인덱싱된 데이터베이스에 year 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$lte": 1900
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

$eq

$eq 연산자는 지정된 필드 컨텐츠가 제공된 인수와 같은 경우 일치시킵니다.

다음과 같이 전체 텍스트 인덱싱에 $eq 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$eq": 2001
		}
	},
	"sort": [
		"title:string"
	],
	"fields": [
		"title"
	]
}

다음과 같이 $eq 필드에 대해 인덱싱된 데이터베이스에 year 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$eq": 2001
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

$ne

$ne 연산자는 지정된 필드 컨텐츠가 제공된 인수와 같지 않은 경우 일치시킵니다.

$ne 유형의 인덱스를 사용하는 경우 json 연산자가 선택기의 기본(최하위 레벨) 요소가 될 수 없습니다.

다음과 같이 전체 텍스트 인덱싱에 $ne 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$ne": 1892
		}
	},
	"fields": [
		"year"
	],
	"sort": [
		"year:number"
	]
}

다음과 같이 1차 인덱스에 $ne 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
	"year": {
			"$ne": 1892
		}
	},
	"fields": [
		"year"
	],
	"limit": 10
}

$gte

$gte 연산자는 지정된 필드 컨텐츠가 인수보다 크거나 같은 경우 일치시킵니다.

다음과 같이 전체 텍스트 인덱싱에 $gte 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gte": 2001
		}
	},
	"sort": [
		"year:number",
		"title:string"
	],
	"fields": [
		"year",
		"title"
	]
}

다음과 같이 $gte 필드에 대해 인덱싱된 데이터베이스에 year 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gte": 2001
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

$gt

$gt 연산자는 지정된 필드 컨텐츠가 인수보다 큰 경우 일치시킵니다.

다음과 같이 전체 텍스트 인덱싱에 $gt 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gt": 2001
		}
	},
	"sort": [
		"year:number",
		"title:string"
	],
	"fields": [
		"year",
		"title"
	]
}

다음과 같이 $gt 필드에 대해 인덱싱된 데이터베이스에 year 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": {
			"$gt": 2001
		}
	},
	"sort": [
		"year"
	],
	"fields": [
		"year"
	]
}

$exists

$exists 연산자는 값에 관계 없이 필드가 존재하는 경우 일치시킵니다.

다음과 같이 $exists 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		"year": 2015,
		"title": {
			"$exists": true
		}
	},
	"fields": [
		"year",
		"_id",
		"title"
	]
}

$type

$type 연산자는 지정된 문서 필드가 올바른 유형이 되도록 요구합니다.

다음과 같이 $type 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		  "year": {
			"$type": "number"
		}
	},
	"fields": [
		"year",
		"_id",
		"title"
	]
}

$in

$in 연산자는 문서 필드가 제공된 목록에 반드시 존재하도록 요구합니다.

다음과 같이 $in 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		  "year": {
			"$in": [2010, 2015]
		}
	},
	"fields": [
		"year",
		"_id",
		"title"
	],
	"limit": 10
}

$nin

$nin 연산자는 문서 필드가 제공된 목록에 반드시 존재하지 않도록 요구합니다.

다음과 같이 $nin 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		  "year": {
			"$nin": [2010, 2015]
		}
	},
	"fields": [
		"year",
		"_id",
		"title"
	],
	"limit": 10
}

$size

$size 연산자는 문서에 있는 배열 필드의 길이를 일치시킵니다.

다음과 같이 $size 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		  "genre": {
			"$size": 4
		}
	},
	"fields": [
		"title",
		"genre"
	],
	"limit": 25
}

$mod

$mod 연산자는 표현식(field % Divisor == Remainder)이 true이고 문서 필드가 정수인 경우에만 문서를 일치시킵니다. 제수 및 나머지는 정수여야 합니다. 제수 및 나머지는 양의 정수 또는 음의 정수가 될 수 있습니다. 나누는 수나 나머지가 정수가 아닌 쿼리의 경우 404 상태 코드가 반환됩니다.

나누는 수나 나머지 값으로 음의 정수를 사용할 경우, IBM® Cloudant® for IBM Cloud® $mod 연산자는 절삭 나눗셈을 사용합니다 Erlang의 rem 모듈로 연산자와 C 언어의 % 연산자는 모두 비슷한 방식으로 동작합니다.

다음과 같이 $mod 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
          "year": {
			"$mod": [100,0]
		}
	},
	"fields": [
		"title",
		"year"
	],
	"limit": 50
}

$regex

$regex 연산자는 필드가 문자열 값이고 제공된 정규식과 일치하는 경우 일치시킵니다.

다음과 같이 $regex 연산자를 사용하는 예제를 참조하십시오.

{
	"selector": {
		   "cast": {
			"$elemMatch": {
				"$regex": "^Robert"
			}
		}
	},
	"fields": [
		"title",
		"cast"
	],
	"limit": 10
}