6

複数の範囲のクエリはCouchDBでどのように実装されていますか?単一範囲条件の場合、開始キーと終了キーの組み合わせは正常に機能しますが、複数範囲条件では同じことが機能しません。

私の表示機能は次のようなものです。

"function(doc){
       if ((doc['couchrest-type'] == 'Item') 
    && doc['loan_name']&& doc['loan_period']&&    
                      doc['loan_amount']) 
     {  emit([doc['template_id'],
          doc['loan_name'],doc['loan_period'],
           doc['loan_amount']],null);}}"

loan_period>5および >30000のドキュメント全体を取得する必要がありloan_amountます。私のstartkeyおよびendkeyパラメーターは次のようになります。

params = {:startkey =>["7446567e45dc5155353736cb3d6041c0",nil,5,30000],
  :endkey=>["7446567e45dc5155353736cb3d6041c0",{},{},{}],:include_docs => true}  

ここでは、望ましい結果が得られていません。スタートキーとエンドキーのパラメータが間違っていると思います。誰か助けてもらえますか?

4

4 に答える 4

4

CouchDB ビューは、エントリの順序付きリストです。ビューに対するクエリは、そのリストの連続したスライスを返します。そのため、2 つの不等条件を適用することはできません。

ローン期間が離散変数であると仮定すると、このケースはおそらく最初にローン期間を出力し、次に期間ごとに 1 つのクエリを発行することによって最もよく解決されるでしょう。

別の解決策は、couchdb-lucene を使用することです。

于 2009-06-26T15:52:42.670 に答える
1

キーとして配列を使用しています。Couchdb は、2 つの要素が等しくなくなるまで各配列要素を昇順で比較することにより、配列を比較します。

たとえば、比較する[1,'a',5]と、[1,'c',0]1 と 1 が比較され、次に 'a' と 'c' が比較され、[1,'a',5] が [1,'a',0] より小さいと判断されます。

これは、範囲キー クエリが失敗する理由を説明しています。

["7446567e45dc5155353736cb3d6041c0",nil,5,30000]より大きい["7446567e45dc5155353736cb3d6041c0",nil,5,90000]

于 2009-07-31T22:41:36.170 に答える
0

実際、CouchDBを使用すると、質問で指定された値の配列である複雑なキーをビューに含めることができます。

[template_id, loan_name, loan_period, loan_amount]

やってみました

params = {:startkey =>["7446567e45dc5155353736cb3d6041c0",nil,5,30000],
  :endkey=>["7446567e45dc5155353736cb3d6041c0",{}],:include_docs => true}

多分

params = {:startkey =>["7446567e45dc5155353736cb3d6041c0","\u0000",5,30000],
  :endkey=>["7446567e45dc5155353736cb3d6041c0","\u9999",{}],:include_docs => true}
于 2009-07-29T14:31:54.373 に答える
0

あなたの emit ステートメントは、私には少し奇妙に見えます。エミットの目的は、キー (つまりインデックス) を生成してから、関心のあるドキュメントの値を生成することです。

例えば:

emit( doc.index, [doc.name, doc.address, ....] );

インデックス用の配列を生成していますが、ビュー用のデータはありません。

また、Couchdb は、map/reduce パラダイムにうまく適合しないため、ビューの交差を提供しません。したがって、あなたのニーズは、次のことに対処しようとすることに要約されます。

特定の範囲を抽出できる一意のインデックスを作成できますか? (スタートキーとエンドキーを使用)

于 2009-06-24T14:21:40.750 に答える