2017-09-04 7 views
1

을 사용하여 하위 문서 만 가져 오기 couchbase db에는 비교적 큰 개체가있는 버킷이 있습니다. 이 객체에는 내부에 다른 객체가 있습니다. 이것은 우리가 객체의 객체로 만들어야했습니다 몇 가지 이유가 있지만, 배열해야하며, 이것은 같은 모습입니다 :couchbase N1QL

{ 
    "companyName": "company name", 
    "companyid": "11111-GUID-11111", 
    "people": { 
     "22222-GUID-22222": { 
      "peopleid": "22222-GUID-22222", 
      "name": "name1" 
     }, 
     "33333-GUID-33333": { 
      "peopleid": "33333-GUID-33333", 
      "name": "name2" 
     }, 
     "44444-GUID-44444": { 
      "peopleid": "44444-GUID-44444", 
      "name": "name3" 
     } 
    } 
} 

이 구조를 사용하여 나는 "사람"을 얻기위한 쿼리를 만들 수 있습니다 같은 쿼리를 사용하여 객체를 다음

SELECT c.* 
FROM companies c 
WHERE ANY v IN OBJECT_VALUES(c.people) SATISFIES v.peopleid = "22222-GUID-22222" END; 

이 구조의 문제는 데이터베이스가 그러나 나는 단지 조건을 만족하는 "사람"개체를 필요로 회사 전체 객체로 응답, 내가 없다는 것입니다 "22222-GUID-22222" 이외의 다른 ID를 가진 사람이 필요합니다.

couchbase를 사용하여 이것을 달성 할 수있는 방법이 있습니까?

답변

1
SELECT FIRST v FOR v IN OBJECT_VALUES(c.people) WHEN v.peopleid = "22222-GUID-22222" END AS people 
FROM companies c 
WHERE ANY v IN OBJECT_VALUES(c.people) SATISFIES v.peopleid = "22222-GUID-22222" END; 
+1

답변은 항상 높이 평가되지만, ** 코드가 문제의 해결 방법에 대해 몇 가지 추가 정보를 제공하는 데 실제로 도움이됩니다. 그렇게하면 유사한 (그러나 동일하지 않은) 문제를 가진 사람들을 도울 수 있습니다. 모든 사람이 정확한 코딩 논리에 익숙하지 않을 수도 있지만 일반적인 접근 방식이나 개념 *을 이해할 수 있습니다. 답변을 개선하는 데 도움이되도록 [** context it ** **] (https://meta.stackexchange.com/questions/114762)를 제공하고 [** writing great answer **]에 대한 도움말을 참조하십시오 http://stackoverflow.com/help/how-to-answer) 답변 수를 계산하는 방법에 대한 팁 : –

+0

vsr, 도와 주셔서 감사합니다! 그것은 내 문제를 거의 해결합니다. 유일한 문제는 지금 내가 말하려는 것처럼 쿼리를 만들어야한다는 것입니다. 50 세 이상의 모든 사람에게 쿼리해야합니다. 쿼리를 사용하여 문서 당 첫 번째 일치를 얻을 수 있습니다. 당신이 이것에 대해서도 대답 할 수 있다면, 그 대답은 완전 할 것이고 나는 대답을 upvote하고 받아 들일 수 있습니다. 다시 한번 감사드립니다. –

+0

해결책을 찾을 수있었습니다. 나는'FIRST' 대신'ARRAY' 문을 사용해야했습니다. 나는 비교적 새로운 couchbase에서, 그래서 나에게 시간이 좀 걸렸습니다. 그래서 나는 그 대답을 받아 들일 것입니다. 한 가지 더 질문하지만 단 하나의 조건 만 사용하여 구현할 수있는 방법이 있습니까? 동적으로 이러한 쿼리를 작성해야합니다. 성능이 느려지면이 솔루션을 사용해도됩니다. –