Azure Cosmos DB의 JavaScript 쿼리 API
적용 대상: NoSQL
Azure Cosmos DB의 API for NoSQL을 사용하여 쿼리를 발급하는 방식과 더불어 Azure Cosmos DB 서버 쪽 SDK는 Azure Cosmos DB 저장 프로시저 및 트리거에서 최적화된 쿼리를 수행하기 위한 JavaScript 인터페이스를 제공합니다. 이 JavaScript 인터페이스를 사용하기 위해 SQL 언어를 알 필요는 없습니다. JavaScript 쿼리 API를 사용하면 조건자 함수를 ECMAScript5의 배열 기본 제공 항목과 유사한 구문 및 Lodash와 같은 인기 있는 JavaScript 라이브러리가 포함된 함수 호출 시퀀스에 전달하여 쿼리를 프로그래밍 방식으로 작성할 수 있습니다. 쿼리는 JavaScript 런타임으로 구문 분석되고 Azure Cosmos DB 인덱스를 사용하여 효율적으로 실행됩니다.
지원되는 JavaScript 함수
Function | 설명 |
---|---|
chain() ... .value([callback] [, options]) |
value()로 종료되어야 하는 연결된 호출을 시작합니다. |
filter(predicateFunction [, options] [, callback]) |
출력 문서를 결과 집합으로 필터링하기 위해 true/false를 반환하는 조건자 함수를 사용하여 입력을 필터링합니다. 이 기능은 SQL의 WHERE 절과 유사하게 작동합니다. |
flatten([isShallow] [, options] [, callback]) |
각 입력 항목의 배열을 단일 배열로 결합하고 평면화합니다. 이 기능은 LINQ의 SelectMany와 유사하게 작동합니다. |
map(transformationFunction [, options] [, callback]) |
각 입력 항목을 JavaScript 개체 또는 값에 매핑하는 변환 함수에 대해 프로젝션을 적용합니다. 이 기능은 SQL의 SELECT 절과 유사하게 작동합니다. |
pluck([propertyName] [, options] [, callback]) |
이 기능은 각 입력 항목에서 단일 속성의 값을 추출하는 맵에 대한 바로 가기입니다. |
sortBy([predicate] [, options] [, callback]) |
주어진 조건자를 사용하여 입력 문서 스트림의 문서를 오름차순으로 정렬하여 새 문서 집합을 생성합니다. 이 기능은 SQL의 ORDER BY 절과 유사하게 작동합니다. |
sortByDescending([predicate] [, options] [, callback]) |
주어진 조건자를 사용하여 입력 문서 스트림의 문서를 내림차순으로 정렬하여 새 문서 집합을 생성합니다. 이 기능은 SQL의 ORDER BY x DESC 절과 유사하게 작동합니다. |
unwind(collectionSelector, [resultSelector], [options], [callback]) |
내부 배열에서 셀프 조인을 수행하고 양쪽의 결과를 결과 프로젝션에 튜플로 추가합니다. 예를 들어, person 문서를 person.pets에 조인하면 [person, pet] 튜플이 생성됩니다. 이는 .NET LINQ의 SelectMany와 유사합니다. |
조건자 및/또는 선택기 함수 안에 포함된 경우 다음과 같은 JavaScript 구문이 Azure Cosmos DB 인덱스에서 직접 실행하도록 자동으로 최적화됩니다.
- 단순 연산자:
=
+
-
*
/
%
|
^
&
==
!=
===
!==
<
>
<=
>=
||
&&
<<
>>
>>>
~
- 개체 리터럴을 포함하는 리터럴:
{}
- var, 반환
다음 JavaScript 구문은 Azure Cosmos DB 인덱스에 대해 최적화되지 않습니다.
- 제어 흐름:
if
for
while
- 함수 호출
자세한 내용은 Azure Cosmos DB 서버 쪽 JavaScript 설명서를 참조하세요.
SQL-JavaScript 치트 시트
다음 표에서 다양한 SQL 쿼리 및 해당 JavaScript 쿼리를 표시합니다. SQL 쿼리와 마찬가지로 속성(예: item.id
)은 대/소문자를 구분합니다.
참고 항목
JavaScript 쿼리 API를 사용하는 경우 __
(이중 밑줄)은 getContext().getCollection()
에 대한 별칭입니다.
SQL | JavaScript Query API | 설명 |
---|---|---|
SELECT * FROM docs |
__.map(function(doc) { return doc; }); |
모든 문서(연속 토큰과 함께 페이지가 매겨진)의 결과는 있는 그대로입니다. |
SELECT docs.id, docs.message AS msg, docs.actions FROM docs |
__.map(function(doc) { return { id: doc.id, msg: doc.message, actions:doc.actions }; }); |
모든 문서에서 id, message(msg로 별칭이 지정됨) 및 action을 프로젝션합니다. |
SELECT * FROM docs WHERE docs.id="X998_Y998" |
__.filter(function(doc) { return doc.id ==="X998_Y998"; }); |
조건자: id = "X998\_Y998"을 사용하여 문서를 쿼리합니다. |
SELECT * FROM docs WHERE ARRAY_CONTAINS(docs.Tags, 123) |
__.filter(function(x) { return x.Tags && x.Tags.indexOf(123) > -1; }); |
Tags 속성이 있는 문서를 쿼리합니다. Tags는 123 값을 포함하는 배열입니다. |
SELECT docs.id, docs.message AS msg FROM docs WHERE docs.id="X998_Y998" |
__.chain() .filter(function(doc) { return doc.id ==="X998_Y998"; }) .map(function(doc) { return { id: doc.id, msg: doc.message }; }) .value(); |
조건자 id = "X998_Y998"을 사용하여 문서를 쿼리한 다음 id와 message(msg로 별칭이 지정됨)를 프로젝션합니다. |
SELECT VALUE tag FROM docs JOIN tag IN docs.Tags ORDER BY docs._ts |
__.chain() .filter(function(doc) { return doc.Tags && Array.isArray(doc.Tags); }) .sortBy(function(doc) { return doc._ts; }) .pluck("Tags") .flatten() .value() |
배열 속성 Tags가 있는 문서를 필터링하고 _ts 타임스탬프 시스템 속성으로 결과 문서를 정렬한 다음, Tags 배열을 프로젝션 및 평면화합니다. |
다음 단계
Azure Cosmos DB에서 저장 프로시저, 트리거 및 사용자 정의 함수를 작성하고 사용하는 개념 및 방법을 알아봅니다.