Подтвердить что ты не робот

Поиск или фильтрация couchdb на ключевом массиве

У меня есть это в моей функции:

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

Когда я запрашиваю поиск, мне нужно, чтобы все 3 элемента массива заполнялись, например:

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

который будет создавать мои записи, но, скажем, например, я просто хочу вернуть все в США, например:

?key=["US"]   

или в США и в штате...

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

ИЛИ... скажем, возможно, мне нужны только все записи из Нью-Йорка... (я знаю, что ниже не работает)

?key=["","NY"]

Я действительно не понимаю, как искать, если вы хотите оставить один из элементов массива пустым?

4b9b3361

Ответ 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",{}]