Как сделать запрос диапазона для числового свойства из индекса Map/Reduce в Couchbase

Допустим, у меня в корзине 4 документа:
doc-1:

{
  "created_time": 1435819571221,
  "field_1": false,
  "field_2": false,
  "version": 2
}

док-2:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": false,
  "version": 3
}

док-3:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": true,
  "version": 10
}

документ-4:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": true,
  "version": 12
}

Я хочу запросить все документы с версией >= 10.
Поэтому я создал представление, которое выдает версию в качестве ключа, думая, что я могу запросить с помощью startKey x, чтобы получить все версии новее, чем x.

Проблема в том, что Couchbase Base выполняет запросы лексикографически.
Итак, в приведенном выше примере я получу все 4 документа.
Как я могу заставить его работать с естественным порядком чисел?

Спасибо, Майкл


person belostoky    schedule 02.07.2015    source источник


Ответы (2)


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

Для проверки я сделал следующее:

  1. Создал новое ведро
  2. Создано четыре документа именно с указанными вами данными
  3. Создал представление со следующим кодом (я не думаю, что StackOverflow правильно форматирует):

    function (doc, meta) { emit(doc.version, null); }

  4. В представление добавлен фильтр, чтобы startKey был равен 10, а затем запрошены результаты.

В результате я получил версию 10 и версию 12.

Документация, на которую я ссылался, находится здесь:

http://docs.couchbase.com/admin/admin/Views/views-querySample.html

Дайте мне знать, если я неправильно понял или если это решит вашу проблему.

С уважением,

person Nic Raboy    schedule 02.07.2015

Хорошо, это моя ошибка - в моем примере ключ, который я выдаю, является числом, но в сценарии, в котором я на самом деле сталкиваюсь, ключи представляют собой строки с числами, такими как:
"id:: 20:: [email protected] ", "id::22::[email protected]", "id::100::[email protected]".
Поэтому, когда я выполнил запрос диапазона с startKey="id::20", он не вернул документ "id::100::[email protected]", потому что он сортируется лексикографически...

Спасибо - вы помогли мне понять мою ошибку...
Майкл

person belostoky    schedule 05.07.2015