Подтвердить что ты не робот

Запрос документов CouchDB между датой начала и датой окончания

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

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

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

SELECT * WHERE [start timestamp] >= doc.start И [конечная метка времени] < doc.end;

4b9b3361

Ответ 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"
   }
}