3

座標系で正しい結果を得るのに問題があります。私のシステムを説明するために、x_axis、y_axis、および名前の列を持つこの単純なデータベースがあります。すべてのデータを取得する必要はありません。データの一部を表示するだけです。

たとえば、10:10 (x_axis -10 から 10 まで、y_axis -10 から 10 まで) の座標系があり、49 個の座標のみを表示したいとします。SQLクエリでは、次のように実行できます。

この機能を試しましたが、成功しませんでした:

   "by_range": {
       "map": "function(doc) { emit([doc.x_axis, doc.y_axis], doc) }"
   }

by_range?startkey=[-3,-3]&endkey=[3,3]

私は間違った結果を得ました:

-3x-3 -3x-2 -3x-1 -3x0 -3x1 -3x2 -3x3 <-- この部分は表示しないでください --> -3x4 -3x5 -3x6 -3x7 -3x8 -3x9 -3x10 <-- 終わりこの部分は表示しないでください --> ..... 3x3 まで

私のプロジェクトをよりよく理解していただくために、作成したいスクリーンショットを次に示します。

4

3 に答える 3

2
by_range?startkey=[-3,-3]&endkey=[3,3]

これを WHERE 句のように使用しています。Couchdb は "startkey" と "endkey" の値を理解せず、結果の出力をいつ開始および停止するかを知るためにのみ使用します。

たとえば、次の結果セットを見てください。

doc1
doc2
doc3
doc4

このクエリを適用すると:

?startkey=doc2&endkey=doc3

結果セットは次のようになります。

doc2
doc3

あなたの例で範囲を適用するには、マップ関数を変更します。

function(doc) {
 if (doc.x <= 3 && doc.x >= -3 && doc.y <= 3 && doc.y >= -3)
   emit([doc.x, doc.y], doc)
}

ダイナミック レンジを処理するための更新:

Database Queries the CouchDB Wayによると:

「CouchDB の設計により、大規模なデータ セットで優れたパフォーマンスが得られます。ただし、クエリを実行するときにマップ関数に動的パラメーターを渡すことができないことを意味します。」

したがって、ダイナミック レンジを実行するには、キー値の出力を単一の値に変更して、startkey パラメーターと endkey パラメーターを使用できるようにする必要があります。

function(doc) {
 emit(doc.x * doc.y, doc)
}

このフィルタを使用します:

by_range?startkey=-9&endkey=9

アプリケーションでは、次のようにして開始キーと終了キーを計算できます

startkey = (x1*y1)
endkey = (x2*y2)
于 2010-01-02T23:18:32.100 に答える
0

次のページを参照してください。

基本的に2つのオプション:

  1. 2 つの別々のクエリを使用して、結果をマージします。
  2. couchdb-lucene を使用する
于 2010-01-04T20:02:17.817 に答える
0

複数のキーを持つ WHERE 句のようなものと、この記事で説明されている手法を実行できます。

于 2010-04-18T09:51:05.687 に答える