Диван с несколькими клавишами

Я предполагаю простой вопрос. Имею следующие данные.

Я хочу найти все строки, где ID> 2, но ‹8, а цена> 30

Я использовал различные версии: startkey=["2", null] или даже что-то вроде startkey=["2", "30"] только для тестирования.

Кажется, что он выполняет оба условия только в первой строке. Итак, если я сделаю: startkey=["2", "30"], я вернусь:

{"id":"3","key":["3","30"],"value":null},
{"id":"4","key":["4","30"],"value":null},
{"id":"5","key":["5","20"],"value":null},
{"id":"6","key":["6","60"],"value":null},
{"id":"8","key":["8","60"],"value":null}

Почему там 5 строка?

Я начинаю понимать, что мне нужно обработать это в коде (.net) и каким-то образом сделать несколько вызовов ... Кажется, я не могу найти ничего, что работает ...

Примечание: я пробовал сделать, скажем, цикл с for (i = 0; i < doc.ID.length; i++), а затем использовать doc.ID[i], но он ничего не возвращает ....

В настоящее время у меня только есть

function (doc, meta) {
    emit([doc.ID, doc.Price ],null);
}

По сути, я хочу иметь поиск, в котором есть 5 клавиш ввода, которые есть у пользователя. Так что мне нужно сделать 5 вызовов, а затем продолжать использовать данные из предыдущего вывода в качестве источника для следующего ???

Другие ссылки, которые я просмотрел, включают: руководство

Заранее спасибо,

С наилучшими пожеланиями, Робин


person Robin Rieger    schedule 19.12.2012    source источник


Ответы (1)


Это распространенное заблуждение, что с ключом индекса составного массива он по-прежнему обрабатывается как строка, поэтому ключ индекса [2,10] на самом деле является «[2,10]», а ключ индекса [5,20] - на самом деле "[5,20]".

Причина, по которой startkey=["2", "30"] показывает строку {"id":"5","key":["5","20"],"value":null},, заключается в том, что как строка это> startkey.

Аналогично, запрос startkey=[2,10]&endkey=[5,10] возвращает

{"total_rows":7,"rows":[
  {"id":"2","key":[2,20],"value":null},
  {"id":"3","key":[3,30],"value":null},
  {"id":"4","key":[4,30],"value":null}
  ]
}

потому что startkey="[2,10]"" [2,20] " && " [4,30] ""[5,10]"=endkey, но «[5,20]» не входит в этот диапазон строк.

Запросы диапазона с помощью startkey и endkey

startkey => endkey - это запрос диапазона с использованием strcmp (), группа и уровень группы основаны на строке, где запятая разделяет токены строки.

Хорошая справочная ссылка (поскольку представления Couchbase во многом похожи на представления Apache CouchDB (вдохновленные ими)) http://wiki.apache.org/couchdb/View_collation#Collation_Specification

Пространственный вид / запрос

Чтобы достичь желаемого результата, вы также можете написать пространственное представление, чтобы иметь многомерные запросы, только числовые. Хотя вы можете сначала не подумать об этом

function (doc, meta) {
  emit({
    type: "Point",
    coordinates: [doc.ID, doc.Price]
 }, meta.id);
}

Запрос будет запросом ограничивающей рамки:

& bbox = 2,0,8,30

{"total_rows":0,"rows":[
  {"id":"2","bbox":[2,20,2,20],"geometry":{"type":"Point","coordinates":[2,20]},"value":"2"},
  {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"},
  {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"},
  {"id":"5","bbox":[5,20,5,20],"geometry":{"type":"Point","coordinates":[5,20]},"value":"5"}
]
}

Другой запрос:

& bbox = 2,30,8,30

{"total_rows":0,"rows":[
  {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"},
  {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"}
 ]
}
person scalabl3    schedule 19.12.2012
comment
Эй приятель. Спасибо за чтение. Теперь имеет больше смысла. Я могу заставить его работать, как ожидалось, с числами, но что, если это действительно строка. Подобно пространственному обзору работает только для чисел. Что, если: а) все «ключи» являются строками, или б) в приведенном выше столбце есть третий столбец, который является строкой, но идентификатор и цена являются числами. Должен ли я создать представление только для строки, а затем объединить вывод с пространственным представлением для чисел? - person Robin Rieger; 20.12.2012
comment
Игнорировать комментарий. Использование эластичного поиска - person Robin Rieger; 21.12.2012
comment
Действительно ли необходимо использовать эластичный поиск? - person Robert Zaremba; 15.03.2013
comment
Эластичный поиск позволяет использовать другой набор индексирования, запросов и коллекций / агрегатов, которых нет в индексах Map / Reduce (представления), это хорошее дополнение для продвинутых вещей. - person scalabl3; 14.08.2013
comment
Прошло много времени с тех пор, как я спрашивал об этом, но, поскольку обновление является эластичным, я думаю, что это здорово с диваном. Я теперь в значительной степени использую эластичную исключительно для поиска и убрал все виды в couchbase. Elastic просто возвращает мне ключи, а затем я извлекаю полный документ из couchbase. Все это до смешного быстро и ОЧЕНЬ гибко. - person Robin Rieger; 09.11.2013