Как выбрать документы в couchdb, которые в течение времени? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть база данных couchdb, содержащая фотографии, с одним документом на фотографию.Я хотел бы создать представление, которое группирует фотографии на основе временной близости, то есть групповые фотографии, созданные в течение 30 минут друг от друга.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Если ваши фотодокументы имеют элемент «метка времени», который правильно сопоставлен в JavaScript, вы можете создать простую карту, которая будет генерировать метки времени в качестве ключей, а затем вычислять окно, которое вы хотите запросить.

Карта простого вида будет выглядеть так:

"mapname": "function(doc) { emit(doc.timestamp) }"

Как только вы узнаете временную метку фотографии, на которой сфокусированы, вам нужно будет сгенерировать параметры startkey и endkey , которые будут установлены в желаемое окно.

CouchDB будет возвращать строки со значениями _id, необходимыми для создания URL-адресов к документам фотографий.

Итак, для изображения с отметкой времени 1332927024 ваш запрос будет

http://couchdb/db/_design/designdocname/_view/mapname?startkey=1332926124&endkey=1332927924
0 голосов
/ 27 марта 2012

Ваша js будет вашей функцией карты, а в Ektorp вы пишете и передаете функцию js map в виде строки (в код, который я выложил ранее). Вы можете получить текущее время как милис, вычесть 30 минут и получить необходимую вам разницу во времени (в Java). Затем вы передаете это милое время javascript. Помните, что ваша функция javascript - это строка, поэтому вы просто добавляете необходимую разницу к этой строке. Который вы можете написать следующим образом:

String javaScriptFunction = "
    function(doc) {
      if(doc.created >" + timeDifferenceIneed + "){
       emit(doc.photoName, doc);
      }
    } " // of course ignored exiting characters

так выше, timeDifferenceIneed ваше текущее время - 30 минут. Затем передайте эту строку выше и получите результат запроса

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