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

解決策を見つけることができました。私は 'FIRST'の代わりに' ARRAY'ステートメントを使わなければなりませんでした。私はcouchbaseで比較的新しいので、私には時間がかかりました。だから私は答えを受け入れるつもりです。しかしもう1つの質問ですが、1つの条件だけを使用してこれを実装する方法はありますか?私は動的にこれらのクエリを構築する必要があります。それがパフォーマンスを低下させるなら、私はこのソリューションでOKです。 –

関連する問題