Запрос документов CouchDB между датой начала и датой окончания - PullRequest
16 голосов
/ 10 июля 2010

Я пытался выяснить, как создать представление CouchDB, которое позволит мне запрашивать все документы, у которых начальная дата больше A и конечная дата меньше B.

Возможно ли это в CouchDB или другом хранилище документов noSQL? Должен ли я удалить его и вернуться к SQL?

Я просто пытаюсь сделать SQL-эквивалент:

SELECT * WHERE [начальная временная метка]> = doc.start AND [конечная временная метка]

Ответы [ 3 ]

8 голосов
/ 10 июля 2010

Просто создайте карту так:

function (doc) {emit(doc.timestamp, 1)}

затем запросите представление с помощью:

?descending=true&limit=10&include_docs=true // Get the latest 10 documents

Представление будет отсортировано от самого старого к последнему, поэтому descending=true отменяет этот порядок.

Если вы хотите определенный диапазон.

?startkey="1970-01-01T00:00:00Z"&endkey="1971-01-01T00:00:00Z"

даст вам все в 1970 году.

Это должно помочь:

3 голосов
/ 25 марта 2013

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

function (doc) {
  var key = [doc.start, doc.end]
  emit(key, doc)
}

Затем, чтобы получить документы с датой начала, превышающей 1970-01-01T00: 00: 00Z и датой окончания до 1971-01-01T00: 00: 00Z , используйте запрос

?startkey=["1970-01-01T00:00:00Z", ""]&endkey=["\ufff0", "1971-01-01T00:00:00Z"]
0 голосов
/ 10 июля 2010

Используйте startkey и endkey. Таким образом, вы можете определить диапазон дат во время выполнения без замедления запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...