2011-01-17 10 views
2

ドキュメント内のいくつかのフィールドがキーリクエストに一致するワイルドカードになるようにCouchDBを照会しようとしています。CouchDBキーは常に一致します

例:

function(doc) { 
    emit(doc.some_field, doc); 
} 

?key=100はおよび*some_field値のsome_fieldとドキュメントの両方が一致します。

これは可能ですか?それを行うためのハックはありますか? CouchDBのwikiから

答えて

0

CouchDBのが実際 Bツリーでキーとして [キー、DOCID]ペアを格納します。

  • あなたは常にキーと値は、(それがビューの結果における「ID」フィールドとして公開されています)ソートDOCIDを増加させることにより、同じキーを持つ
  • ビューの行から来た文書化され知っている:これは、ことを意味します。

だから私は、彼らがソートされているので、キーの一部として使用されるワイルドカードのフィールドが可能であることとは思いません。それらが可能であると仮定してください。次に、ビューからキー範囲を照会しようとすると、任意のキー範囲でワイルドカードを含む行が返されます。それは彼らがどこにいても意味します。しかし、ソートされているので不可能です。これはワイルドカードを持つ行で、他の行のうちの1つは大きなキーを持ち、もう1つは小さいものです。

?startkey="key"&endkey="key\ufff0" 

キー *に一致するように:CouchDB documentationあなたが行うことができますあたりのよう

+0

ええ、どういうわけかORをやることがあったと思いますが、それはうまくいくでしょう。 100 OR *のように。 couchdb-luceneを使わなければならないかもしれません。 –

+0

回避策として、キーを最初に要求する(?key = 100)と、ワイルドカード化された行を2番目に要求することがあります。もちろん、ワイルドカード化された行には、隣接するキーが必要です。 – ssmir

+0

http://wiki.apache.org/couchdb/View_collat​​ion?action=show&redirect=ViewCollat​​ion#String_Rangesにすべてのことが書かれています:) –

1

+1

質問を正しく理解すれば、ワイルドカードを含むクエリではありません。彼はキーの中にワイルドカードを持つためにビューの行を必要とします。 OT:couchdbなどでの作業に感謝します:) – ssmir

+0

右に、データベースに格納されているワイルドカードキーに一致するキーが必要です。私はそれがおそらく奇妙に思えるかもしれません...しかし、パッケージマネージャーは、X、Y、Zのシステムプロパティ用にコンパイルされたすべてのパッケージを尋ねることができますが、いくつかのパッケージは汎用であり、XとYでは一致しますが、ただし、*のような一般的なフィールドがあります。 –

+2

ああ、申し訳ありませんが、私は当時の質問を誤解しました。POSTボディが次のように見える場合は、ビューに対するPOSTリクエストを使用して、多くのキーの論理ORを取得できます。 '{" keys ":" key2 "、...}}' http: /wiki.apache.org/couchdb/HTTP_view_API –

関連する問題