私のビュー関数には次のものがあります:
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",{}]