web-dev-qa-db-ja.com

キー配列でのcouchdb検索またはフィルタリング

私は私のビュー関数にこれを持っています:

emit([doc.address.country,doc.address.state, doc.address.city], doc);

検索をクエリするときは、配列の3つの要素すべてに入力する必要があります。次に例を示します。

?key=["US","NY","New York"]

これでレコードが作成されますが、たとえば、米国内のすべてのものを返品したい場合などです。

?key=["US"]   

または米国と州では...

?key=["US","NY"] 

または...ニューヨークのすべてのレコードだけが欲しいとしましょう...(以下は機能しないことを知っています)

?key=["","NY"]

配列の要素の1つを空のままにしておきたい場合、検索方法がわかりません。

24
Matt

最初:

key = ["US"]は配列キー["US"、 "NY"]では機能しません。これは、正確な["US"]であるキーを探しているためです。代わりに、使用する必要があります

startkey=["US"]&endkey=["US",{}] 

次に、それらのキーが結果セットに含まれます。

["DE","Bavaria","Munich"]   <---- NO ! "DE" is out of Range of startkey
["US","FL","Miami"]         <---- YES, starts with "US"
["US","NY","New York"]      <---- YES, starts with "US"
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey

また働く:

startkey=["US","FL"]&endkey=["US","FL",{}] 

結果:

["DE","Bavaria","Munich"]   <---- NO ! "DE" is out of Range of startkey
["US","FL","Miami"]         <---- YES, starts with "US","FL"
["US","NY","New York"]      <---- NO, "US","NY" is out of Range of endkey
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey

Second:左側に空白を含めることはできません。したがって、さらにいくつかの出力を書き込む必要があります:(クエリを実行する必要がない場合は、2番目と3番目の配列アイテムを出力する必要はありません。 )

「byStateCityCountry」を表示:

emit([doc.address.state, doc.address.city,address.country], doc);

「byCityStateCountry」を表示:

emit([address.city,doc.address.state, doc.address.country], doc);

クエリのタイプを決定するために最初にフラグを設定するだけなので、すべてを1つのビューで実行できます。

emit([1,address.country,doc.address.state, doc.address.city], doc);
emit([2,doc.address.state, doc.address.city,address.country], doc);
emit([3,address.city,doc.address.state, doc.address.country], doc);

使用法:

?startkey=[1,"US"]&endkey=[1,"US",{}]
?startkey=[2,"FL"]&endkey=[2,"FL",{}]
?startkey=[3,"Miami"]&endkey=[3,"Miami",{}]
44
okurow