2017-09-04 79 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

雖然答案總是值得讚賞的,但它確實有助於提供一些關於**代碼如何解決手頭問題的額外信息。這樣做可以幫助那些具有類似(但不完全相同)問題的人。不是每個人都可能熟悉你的確切編碼邏輯,但可以理解你的一般*方法*或*概念*。爲了幫助改進您的答案,請提供一些[**環境**](https://meta.stackexchange.com/questions/114762),並參閱關於[**寫出優秀答案**]的幫助文章( http://stackoverflow.com/help/how-to-answer)關於如何讓你的答案計數的一些提示:) –

+0

vsr,謝謝你的幫助!它幾乎解決了我的問題。現在唯一的問題是,我不得不提出查詢,我們得說:我必須查詢年齡大於50歲的每個人。使用您的查詢,我只能得到每個文檔的第一個匹配。如果您也可以對此做出迴應,那麼答案將會完整,我可以上傳並接受您的答案。再次感謝。 –

+0

我能找到解決方案。我必須使用'ARRAY'語句而不是'FIRST'。我在couchbase上比較新,所以花了一些時間。所以我會接受答案。還有一個問題,有沒有什麼辦法只用一個條件來實現呢?我必須動態構建這些查詢。如果這會降低性能,那麼我對這個解決方案就行了。 –