2009-05-08 2 views
3

Я пытаюсь написать представление couchdb, которое берет временную метку created_at в отсортированном формате (2009/05/07 21:40:17 +0000) и возвращает все документы, которые имеют большее значение created_at.CouchDB Просмотров: created_at больше, чем пройденное значение

Я специально использую couch_foo, но если я могу понять, как писать представление, я могу создать его в футоне или в модели couch_foo вместо того, чтобы позволить couch_foo сделать это для меня.

Я искал все вокруг и не могу определить карту/уменьшить, чтобы сделать это, если это возможно.

ответ

3

Вы хотите написать представление, которое создает ключ поля метки времени в этом формате, а затем запросить его с помощью параметра startkey.

Так что вид будет выглядеть примерно так:

"map" : "function(doc) { emit(doc.timestamp_field, doc) }" 

И ваш URL будет что-то вроде:

http://mysever/database/_design/mydoc/_view/myview?startkey="2009/05/07 21:40:17 +0000" 

HTTP view API страница на Wiki имеет больше информации. Вы также можете рассмотреть User Mailing List.

1

Обратите внимание, что couchdb работает только с значениями json. Если часовой пояс, если документ, хранящийся в couchdb, отличается от часового пояса вашего ключа запуска, запрос скорее всего не удастся.

4

Это проблема, с которой я столкнулся вначале, прежде чем я полностью понял, как работают представления.

Ключом к пониманию является то, что представление выполняется только один раз для каждого (пересмотра) документа. Другими словами, когда вы запрашиваете представление, вы не запускаете функцию, вы просто просматриваете результаты выполнения функции. Таким образом, невозможно передать какие-либо параметры, представленные пользователем, в представление.

Как затем сравнить значение в представлении с представленным пользователем значением? Секрет состоит в том, чтобы испускать это поле в качестве ключа в функции карты и полагаться на то, чтобы позволить кучеру заказывать ключи.

Ваша функция карта будет что-то вроде

"map" : "function(doc) { emit(doc.created_at, doc); }" 

и вы бы запросить его следующим образом:

http://localhost:5984/db/_design/ddoc/_view/view?startkey=%222009/05/07%2021:40:17 +0000%22 

Я взял на себя смелость uriEncoding кавычки и пробелы в URL, так что должен использоваться как есть.

Смежные вопросы