4

簡単な質問だと思います。私は次のデータを持っています。

ID が 2 より大きく 8 より小さく、価格が 30 より大きいすべての行を検索したい

startkey=["2", null]私はさまざまなバージョンの : を使用してきstartkey=["2", "30"]ました。

最初の行で両方の条件を実行しているように見えるだけです。したがって、次のようにすると、次のstartkey=["2", "30"]ようになります。

{"id":"3","key":["3","30"],"value":null},
{"id":"4","key":["4","30"],"value":null},
{"id":"5","key":["5","20"],"value":null},
{"id":"6","key":["6","60"],"value":null},
{"id":"8","key":["8","60"],"value":null}

なぜ5行目があるのですか?

コード (.net) でこれを処理し、何らかの方法で複数の呼び出しを行う必要があるというビューを取得し始めています...これで機能するものを見つけることができないようです....

注:ループを言ってfor (i = 0; i < doc.ID.length; i++)から使用しようとしましdoc.ID[i]たが、何も返されません....

現在、私はちょうど持っています

function (doc, meta) {
    emit([doc.ID, doc.Price ],null);
}

基本的に、ユーザーが持っている入力キーが 5 つある検索を行いたいと考えています。では、5 回の呼び出しを行い、前の出力から次のソースとしてデータを取得し続ける必要がありますか?

私が見た他の参考文献は次のとおりです。

前もって感謝します、

敬具 ロビン

4

1 に答える 1

8

これはよくある誤解であり、複合配列のインデックスキーでは文字列として扱われるため、インデックスキー[2,10]は実際には「[2,10]」であり、インデックスキー[5,20]は実際には「[5,20]」。

したがって、行をstartkey=["2", "30"]表示する理由{"id":"5","key":["5","20"],"value":null},は、文字列としては>startkeyであるためです。

同様に、クエリstartkey=[2,10]&endkey=[5,10]

{"total_rows":7,"rows":[
  {"id":"2","key":[2,20],"value":null},
  {"id":"3","key":[3,30],"value":null},
  {"id":"4","key":[4,30],"value":null}
  ]
}

startkey="[2,10]"< "[2,20]" && " [4,30]" <"[5,10]"=endkeyですが、"[5,20]"はその文字列の範囲内にありません。

スタートキーとエンドキーを使用した範囲クエリ

startkey => endkeyは、strcmp()を使用した範囲クエリです。グループおよびグループレベルは文字列に基づいており、コンマで文字列トークンを区切ります。

優れたリファレンスリンク(CouchbaseビューはApache CouchDBビュー(それらに触発されたもの)のように機能するため) http://wiki.apache.org/couchdb/View_collat ​​ion#Collat​​ion_Specification

空間ビュー/クエリ

目的の結果を達成するために、数値のみの多次元クエリを持つ空間ビューを作成することもできます。あなたは最初はそれを考えていないかもしれませんが

function (doc, meta) {
  emit({
    type: "Point",
    coordinates: [doc.ID, doc.Price]
 }, meta.id);
}

クエリはバウンディングボックスクエリになります。

&bbox = 2,0,8,30

{"total_rows":0,"rows":[
  {"id":"2","bbox":[2,20,2,20],"geometry":{"type":"Point","coordinates":[2,20]},"value":"2"},
  {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"},
  {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"},
  {"id":"5","bbox":[5,20,5,20],"geometry":{"type":"Point","coordinates":[5,20]},"value":"5"}
]
}

別のクエリ:

&bbox = 2,30,8,30

{"total_rows":0,"rows":[
  {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"},
  {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"}
 ]
}
于 2012-12-19T18:09:39.307 に答える