Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ErkОтветов: 4

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

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

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

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

  • Дублируйте, см. stackoverflow.com/questions/3079040/range- key-in-couchdb-views b_erb 10.07.2010
  • @PartlyCloudy Я не понимаю, как этот вопрос является обманом вашего вопроса. Ваш вопрос генерирует набор событий через равные промежутки времени в некотором диапазоне, тогда как он ищет все значения в некотором диапазоне. Я мог просто неправильно использовать ваше решение, но я так не думаю. jfenwick 07.06.2011

nosqldatecouchdb

Ответы

Ответ 1 · рейтинг 8 · mikeal

Просто создайте карту следующим образом:

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 году.

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

  • http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
  • http://wiki.apache.org/couchdb/HttpViewApi
  • http://wiki.apache.org/couchdb/View_collation

Ответ 2 · рейтинг 3 · Noah

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

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 · рейтинг 2 · Paul

Я искал то же самое и наткнулся на этот вопрос. С CouchDB 2.0 или более поздней версии у вас есть возможность использовать запросы Mango, которые включают больше и меньше чем.

Запрос манго может выглядеть так:

"selector": {
   "effectiveDate": {
      "$gte": "2000-04-29T00:00:00.000Z",
      "$lt": "2020-05-01T00:00:00.000Z"
   }
}

Ответ 4 · Umang

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы