Запрос документов CouchDB между датой начала и датой окончания
Я пытался выяснить, как создать представление CouchDB, которое позволит мне запрашивать все документы, у которых дата начала больше A и дата окончания меньше B.
Возможно ли это в CouchDB или другом хранилище документов noSQL? Должен ли я отказаться от него и вернуться к SQL?
Я просто пытаюсь выполнить эквивалент SQL:
SELECT * WHERE [start timestamp] >= doc.start И [конечная метка времени] < doc.end;
Ответы
Ответ 1
Просто создайте такую карту:
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 году.
Это должно помочь:
Ответ 2
Используйте ключ массива в вашей функции карты
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"]
Ответ 3
Используйте startkey
и endkey
. Таким образом, вы можете определить свой диапазон дат во время выполнения, не замедляя ваш запрос.
Ответ 4
Я искал то же самое и наткнулся на этот вопрос. С CouchDB 2.0 или выше у вас есть возможность использовать Mango Queries, который включает в себя больше и меньше чем.
Запрос манго может выглядеть так:
"selector": {
"effectiveDate": {
"$gte": "2000-04-29T00:00:00.000Z",
"$lt": "2020-05-01T00:00:00.000Z"
}
}