2017-05-23 14 views
0

の配列を横断するため、私が働いているCouchbaseの文書構造である:N1qlクエリ以下のオブジェクト

{ 
"name":"Harry", 
"lastname":"sam", 
"supplier_info": { 
    "HU": [ 
     { 
     "40383": "Bangalore." 
     },{ 
     "41163": "new." 
     } 
    ], 
"SK": [ 
     { 
     "40383": "DYNAMIT KFT." 
     } 
    ] 
} 

要件は、「40383」に関係なく国のようサプライヤの数を持っている私のDBからすべての文書を取得することです。どのようにN1QLクエリでそれを行うことができますか?デフォルト
WHERE ARRAY_FLATTEN(OBJECT_VALUES(supplier_info)、2)を満たす "40383" OBJECT_NAMES IN(V)最後に、ANYからV

答えて

1

SELECT *(私は同様に国の情報を持っていません)。

デフォルト値への入力データ

INSERT( "kkk01"、{ "supplier_info":{ "HU":[{ "40383": "バンガロール"}、{ "41163": "新しいです" {{"40383": "Bangalore。}"、 "SK":{{"40383": "DYNAMIT KFT"}}}})、 VALUES( "kkk03"、{"supplier_info":{"HU" "}、{" 41164 ":" az。 "}]、" SK ":[{" "40385": "DYNAMIT"}]}}));

次のクエリでは、個別の国に

を与える(OBJECT_PAIRS、V IN FOR(SELECT RAW ARRAY_FLATTEN(v.val U字の配列ARRAYのv.name "40383" OBJECT_NAMES IN(u)の端からsupplier_infoをDISTINCT国を選択)END、2)FROM default)AS国UNNEST諸国AS国どこの国が間違っていないか。

サプライヤー名、国、サプライヤー番号40383.

SELECT q.name、q.lastname、s.country、s.snumber、(SELECT名前FROM s.snameを持つすべてのレコードの名前と姓を取得(0).name、 "sname":OBJECT_PAIRS(u)[0] .val} FOR u IN v.val(姓):ARRAY_FLATTEN(ARRAY ARRAY {"country":v.name、 "snumber":OBJECT_PAIRS OBJECT_PAIRS(supplier_info)END内のOBJECT_NAMES(u)ENDでの "40383"、ASTM_FROMのデフォルト値)AS q UNNEST q.sinfo AS s;

+0

助けてくれてありがとう..それは働いた!!!!!!。 –

+0

国全体を検索したい場合(「40383」が存在し、サプライヤ名がドキュメント全体ではなくクエリ内にある場合) –

+0

SELECT DISTINCT国FROM(SELECT RAW ARRAY_FLATTEN(ARRAY ARRAY_FLATTEN(ARRAY ARRAY v.name IN u.v.val WHEN) 40383 "OBJECT_NAMES(u)END OF v IN OBJECT_PAIRS(supplier_info)END、2)FROM default)AS国UNNEST国AS国どこにいるのかわかりません – vsr

関連する問題