Как именно startkey и endkey работают в CouchDB?

Я работаю с базой данных локаций в CouchDB. Я создал представление, где мой ключ - это массив с округленными значениями широты и долготы. Сейчас я выбираю со следующими условиями:

Startkey: [ 52.34, 4.883 ]
Endkey:   [ 52.37, 4.903 ]

Здесь я ожидаю, что я получу только документы, где широта между 52,34 и 52,37. И долгота между 4.883 и 4.903.

Результат я получаю:

[ 52.358, 4.919 ]
[ 52.358, 4.919 ]
[ 52.362, 4.861 ]
[ 52.362, 4.861 ]
[ 52.362, 4.861 ]

Как вы, возможно, заметили, в первом результате долгота больше, чем долгота конечного ключа, 4.919.

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

Я немного погуглил и не могу найти объяснение startkey/endkey как массива. Кто может дать мне объяснение того, как CouchDB просматривает документы и определяет, когда "начинать", а когда "заканчивать"?

1 ответ

Решение

Предполагая следующие данные на ваш взгляд с этими ключами:

startkey == [a, 11] а также endkey == [c, 11]:

[a, 10]
[a, 11]   <-- startkey
[a, 12]   <--
[b, 10]   <--
[b, 11]   <--
[b, 12]   <--
[c, 10]   <--
[c, 11]   <-- endkey
[c, 12]

(Все, отмеченное стрелкой, будет возвращено).

Данные в представлении сортируются с помощью ключа. С startkey а также endkey Вы можете контролировать, где начинать и заканчивать в представлении. Вы не можете указать ограничения для данных. Все, что отсортировано между startkey а также endkey будет возвращен. Пожалуйста, прочитайте http://wiki.apache.org/couchdb/View_collation для получения дополнительной информации.

Если вы хотите выполнять геопространственные запросы, вы должны проверить GeoCouch ( https://github.com/couchbase/geocouch/).


Суммировано: ключи в представлениях CouchDB хранятся в одномерных списках. Записи в этих списках сортируются в соответствии с правилами View_collation. Двумерные массивы могут выглядеть особенными, но на самом деле это не так. [a, 10] сортируется после [a] и после a и раньше [b, 5] и раньше [c] (например).

Если вы используете startkey а также endkeyСкажете "все в том числе и после startkey и до и в том числе endkey". startkey а также endkey Записи не обязательно должны присутствовать в списке.

Другие вопросы по тегам