1

私はcouchbaseにかなり慣れていないので、作成しようとしている特定のクエリに対する答えを見つけようとしましたが、これまでのところあまり成功していません.

この特定のケースでビューを使用するか N1QL を使用するかについて議論し、N1QL で解決しましたが、それを機能させることができなかったので、結局のところビューの方が優れているかもしれません。

基本的に、次のドキュメントのドキュメント キー (Group_1) があります。

Group_1
{
  "cbType": "group",
  "ID": 1,
  "Name": "Group Atlas 3",
  "StoreList": [
    2,
    4,
    6
  ]
}

「ストア」ドキュメントもあります。それらのキーは、このドキュメントのストアリストにリストされています。(Store_2、Store_4、Store_6 で、storeID 値は 2、4、6 です) 基本的に、リストされている 3 つのドキュメントすべてを取得したいと考えています。

私が持っているのは、次のようにして、ID を使用してこのドキュメントを取得することです。

var result = CouchbaseManager.Bucket.Get<dynamic>(couchbaseKey);
mygroup = JsonConvert.DeserializeObject<Group> (result.ToString());

次に、ストアリストをループして、同じ方法ですべてのストアを取得できますが、グループから他に何も必要ありません。必要なのはストアだけであり、1 回の操作でこれを実行することをお勧めします。

指定されたドキュメント値に対して直接 N1QL を実行する方法を知っている人はいますか? のようなもの (そして、これは私が何を得ようとしているのかを明確に説明しようとしている、まったく機能しない架空のコードです):

SELECT * FROM mycouchbase WHERE documentkey IN Group_1.StoreList

ありがとう

更新: したがって、Nic のソリューションは機能しません。

これは私が必要とするものに最も近いものです:

SELECT b from DataBoard c USE KEYS ["Group_X"] UNNEST c.StoreList b;

"results":[{"b":2},{"b":4},{"b":6}]

これは、特定のグループ (Group_X) に必要なストアの ID のリストを返します。同じステートメントで ID だけでなく完全なストアを取得する方法はまだ見つかりません。

完了したら、完全なソリューションと、その過程で遭遇したすべてのスピード バンプを投稿します。

4

4 に答える 4

0

アップデートに基づいて、次のことができます。

SELECT b, s
FROM DataBoard c USE KEYS ["Group_X"]
UNNEST c.StoreList b
JOIN store_bucket s ON KEYS "Store_" || TO_STRING(b);
于 2015-08-09T15:27:33.187 に答える
0

同様の要件があり、次のようなクエリで必要なものを取得しました。

SELECT store
FROM `bucket-name-here` group
JOIN `bucket-name-here` store ON KEYS group.StoreList
WHERE group.cbType = 'group'
AND group.ID = 1
于 2016-03-14T20:39:13.680 に答える