Couchbase를 둘러보던 중 포럼 Couchbase에서 배열 데이터에 대한 쿼리에 관한 질문을 받았습니다. 관계형 데이터베이스 출신인 저도 SQL로 복잡한 형식의 JSON 데이터를 쿼리하는 개념을 이해하는 데 어려움을 겪은 적이 있습니다.
이러한 임베디드 NoSQL 문서 내에서 어떻게 쿼리할 수 있을까요? 여러 가지 방법이 있으며, 그 중 특별히 어려운 방법은 없습니다. 몇 가지 복잡한 쿼리 가능성에 대해 살펴보겠습니다.
제가 우연히 발견한 질문이 궁금하신 경우 다음에서 확인할 수 있습니다. 여기. 사용자는 단일 문서에 대해 배열에 중첩된 객체를 쿼리하는 방법을 알고 싶어했습니다. 제안된 문서 모델은 이와 비슷해 보였습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "id": "order-1", "type": "주문", "items": [ { "id": "포켓몬-블루", "type": "게임", "이름": "포켓몬 블루" }, { "id": "ms-surface-book", "유형": "컴퓨팅", "이름": "마이크로소프트 서피스 북" } ] } |
최종 목표는 쿼리에서 각 객체를 기반으로 하는 어디
중첩된 조건이 포함된 유형
속성입니다.
이를 수행하는 한 가지 방법은 다음과 같은 N1QL 쿼리를 작성하는 것입니다:
1 2 3 4 5 |
선택 포럼.id, 포럼.유형, 항목 포럼에서 항목으로 항목 중첩 해제 WHERE item.type != "computing"; |
위의 쿼리에서 우리는 선택
라는 카우치베이스 버킷에서 포럼
를 사용하여 배열을 평평하게 만들고 UNNEST
키워드를 추가합니다. 평탄화된 결과 집합은 다음과 같이 보일 것입니다. 어디
조건:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[ { "id": "order-1", "item": { "id": "포켓몬-블루", "이름": "포켓몬 블루", "type": "게임" }, "type": "주문" }, { "id": "order-1", "item": { "id": "ms-surface-book", "이름": "마이크로소프트 서피스 북", "유형": "컴퓨팅" }, "type": "주문" } ] |
그리고 어디
조건은 두 개의 결과가 아닌 단일 결과를 반환하며, 여기서 단일 결과는 게임
쿼리에 따라 입력합니다.
그렇다면 이 방법만이 우리가 방금 한 일을 달성할 수 있는 유일한 방법일까요? 절대 아닙니다!
다음 N1QL 쿼리를 작성합니다:
1 2 3 4 5 |
선택 forum.id, forum.type, ARRAY item FOR item IN forum.items WHEN item.type != 'computing' END AS item 포럼에서 |
위의 쿼리에서 우리는 먼저 Couchbase에서 배열을 평탄화하지 않습니다. UNNEST
작업을 사용할 수 없습니다. 대신 다음 중 하나를 사용하고 있습니다. 수집 연산자 를 클릭하여 기준에 맞는 배열 항목을 찾습니다.
작업을 완료하는 다른 방법도 있나요? 물론 다른 방법도 있지만, 이 두 가지만으로도 N1QL을 사용하여 Couchbase에서 배열을 쿼리하고 UNNEST
키워드를 입력합니다.
N1QL에 대한 자세한 도움이 필요하면 다음을 참조하세요. 카우치베이스 개발자 포털 를 클릭하세요.
[...] 최근 기사에서 N1QL을 사용하여 Couchbase에서 배열을 평평하게 만들고 쿼리하는 방법에 대해 썼습니다. 이 글은 Couchbase 포럼에서 인기 있는 질문에서 영감을 얻었습니다. 게시 후 [...]
이러한 결과를 배열로 중첩하는 데 사용할 수 있는 방법이 있나요? 예를 들어
{
"id": "order-1",
"type": "주문",
"items": [
{
"id": "포켓몬-블루",
"type": "게임",
"이름": "포켓몬 블루"
}
]
}