2011-01-17 2 views
2

Я ищу запрос к моему CouchDB таким образом, что некоторые из полей документа могут быть подстановочными знаками, которые соответствуют любому запросу ключа.Ключ CouchDB всегда соответствует

Пример:

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

?key=100 будет соответствовать как документ с из строку field и значения строку field как *.

Возможно ли это? Есть ли взломать это?

ответ

0

От CouchDB wiki:

CouchDB фактически сохраняет [ключ, DocId] пара в качестве ключа в BTree. Это означает, что:

  • вы всегда знаете, какой документ ключ и значение пришли (это разоблачен как поле «ид» в результате просмотра)
  • вид строк с одинаковыми ключами сортировки за счет увеличения DocId.

Так что я не думаю, что подстановочные поля, используемые в качестве части ключа возможно потому, что они сортируются. Предположим, что они возможны. Затем, если вы попытаетесь запросить диапазон ключей из представления, строки с подстановочным знаком будут возвращены с любым диапазоном ключей. Это означает, что они повсюду. Но это невозможно, потому что они отсортированы. Это строка с подстановочным знаком помещается между двумя другими строками, один из которых имеет больший ключ, а другой - меньший.

+0

Да, я думаю, если бы было что-то сделать ИЛИ, хотя это сработало бы. как 100 OR *. Возможно, мне придется использовать couchdb-lucene. –

+0

Использование двух запросов может служить обходным путем: первый запрос для вашего ключа (? Key = 100), а второй для подстановочных строк. Если подстрочные строки курса должны иметь соседние ключи. – ssmir

+0

http://wiki.apache.org/couchdb/View_collation?action=show&redirect=ViewCollation#String_Ranges говорит, что все это возможно :) –

1

Согласно CouchDB documentation вы можете сделать:

?startkey="key"&endkey="key\ufff0" 

соответствовать ключа *.

+1

Если я правильно понял вопрос, не запрос с подстановочным знаком. Ему нужны строки вида, чтобы иметь подстановочные знаки в их ключах. OT: спасибо за вашу работу на couchdb и т. Д. :) – ssmir

+0

Правильно, мне нужен любой ключ, который я передаю, чтобы закончить сопоставление с некоторым ключом, хранящимся в базе данных. Я знаю, что это, вероятно, звучит странно ... Но его менеджер пакетов может запросить все пакеты, скомпилированные для системных свойств X, Y и Z, но некоторые пакеты являются универсальными и могут совпадать с X и Y, но не имеют Z однако они имеют общее поле, обозначенное как *. –

+2

Ах, извините, я тогда неправильно понял вопрос.Вы можете использовать запрос POST для представления, чтобы получить логическое ИЛИ для многих ключей, если ваше тело POST выглядит так: '{" keys ": [" key1 "," key2 ", ...]}' См. Http://wiki.apache.org/couchdb/HTTP_view_API –

Смежные вопросы