Первый:
key = ["US"] не будет работать с ключом массива ["US", "NY"], потому что вы ищете ключ EXACT ["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
Второе:
Вы не можете иметь пробелы на левой стороне .. поэтому вы должны написать еще несколько выбросов:
(вам не нужно выдавать второй и третий элемент массива, если вам не нужно запрашивать его)
просмотр "byStateCityCountry":
emit([doc.address.state, doc.address.city,address.country], doc);
просмотр "byCityStateCountry":
emit([address.city,doc.address.state, doc.address.country], doc);
просто поставьте флаг на первое место, чтобы определить тип запроса, чтобы вы могли делать все в одном представлении:
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",{}]