couchdb wyszukiwanie lub filtrowanie na tablicy klawiszy

Mam to w moim widoku:

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

Gdy odpytywam wyszukiwanie, muszę mieć wypełnione wszystkie 3 elementy tablicy, na przykład:

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

To będzie produkować moje płyty, ale powiedzmy na przykład, Chcę tylko zwrócić wszystko w USA na przykład:

?key=["US"]   
Albo w USA i stanie...
?key=["US","NY"] 

Lub... powiedzmy, że chcę tylko wszystkie płyty z NY... (wiem, że poniżej nie działa)

?key=["","NY"]

Naprawdę nie rozumiem, jak szukać, jeśli chcesz pozostawić jeden z elementów tablicy pusty?

Author: Matt, 2012-03-13

1 answers

Pierwszy:

Key = ["US"] nie będzie działać na kluczu tablicy ["US", "NY"], ponieważ szukasz klucza, który jest dokładny ["US"]. Zamiast tego musisz użyć

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

Wtedy te klucze są w resultset:

["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

Działa Również:

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

Wynik:

["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

Drugi: Nie możesz mieć ślepaków po lewej stronie.. więc musisz napisać więcej emitów: ( nie musisz emitować drugiego i trzeciego elementu tablicy, jeśli nie musisz odpytywać it)

View "byStateCityCountry":

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

View "byCityStateCountry":

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

Po prostu umieść flagę w pierwszej kolejności, aby określić rodzaj zapytania, dzięki czemu możesz zrobić wszystko w jednym widoku:

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);

Użycie:

?startkey=[1,"US"]&endkey=[1,"US",{}]
?startkey=[2,"FL"]&endkey=[2,"FL",{}]
?startkey=[3,"Miami"]&endkey=[3,"Miami",{}]
 43
Author: okurow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-15 08:29:16