キー配列でのCouchdbの検索またはフィルタリング 質問する

キー配列でのCouchdbの検索またはフィルタリング 質問する

私のビュー関数には次のものがあります:

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

検索をクエリする場合、配列の 3 つの要素すべてを入力する必要があります。例:

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

これでレコードが生成されますが、たとえば、米国内のすべてを返したいとします。

?key=["US"]   

または米国および州では...

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

または... NY のすべてのレコードだけが必要な場合があります... (以下は機能しないことはわかっています)

?key=["","NY"]

配列の要素の 1 つを空のままにしたい場合、どのように検索すればよいのかよくわかりません。

ベストアンサー1

初め:

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

2番目:左側に空白を入れることはできません。そのため、さらにいくつかの出力を記述する必要があります。(クエリを実行する必要がない場合は、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",{}]

おすすめ記事