Ответ 1
Сначала:
key = [ "US" ] не будет работать с Array Key [ "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",{}]