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?
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",{}]
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