Как реализовать "частичное совпадение" в запросе couchdb - PullRequest
4 голосов
/ 26 января 2011

У меня есть Couchdb, в котором хранятся документы, каждый из которых имеет поле префикса.Префиксы уникальны, поэтому они могут фактически использоваться в качестве идентификаторов

Скажем:


_id=1 {prefix="AAABBBCCC", ...}
_id=2 {prefix="AAABBBDDD", ...}
_id=3 {prefix="AAABBE", ...}
_id=4 {prefix="AAAFF", ...}

Мне нужно запросить эти документы, извлекая соответствующий документ (всегда одно полное совпадение с префиксом), используя ключэто длиннее, но полностью соответствует префиксу.Длина префикса варьируется, длина ключа постоянна.


query_key = AAABBBCCC123 => _id1
query_key = AAABBBDDD456 => _id2
query_key = AAABBEEEEEEE => _id3
query_key = AAABxxxxxxxx => Null

Есть идеи, как это можно сделать в Couch?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Сделать вид, излучающий doc.prefix.Затем запрос по убыванию с startkey, установленным на ваш ключ запроса с limit=1.Полученный префикс может быть вашим, но вы должны подтвердить.

Вы можете подтвердить префикс в клиенте или с помощью функции _list.Функция _list, вероятно, не помогает с производительностью, поэтому я хотел бы рассмотреть это на клиенте, , если только у вас много клиентов на многих языках, и вы можете стандартизировать один URL для запроса с тем же выводом.

0 голосов
/ 26 января 2011

Функция map должна выглядеть следующим образом

function(doc) {
  emit(doc.prefix, doc);
}

и вам нужно искать документы с функцией подстроки в ключе.

Как это:

_design/doc/_view/viewname?key=QUERY_KEY.substring(0, FIXED_KEY_LENGTH)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...