Просмотры CouchDB: созданный_ больше, чем переданное значение - PullRequest
3 голосов
/ 08 мая 2009

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

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

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

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

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

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

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

Ваша функция карты будет выглядеть примерно так:

"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

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

3 голосов
/ 08 мая 2009

Вы хотите написать представление, которое создает ключ поля метки времени в этом формате, а затем запросить его с параметром 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"

Страница API просмотра HTTP на Wiki содержит дополнительную информацию. Вы также можете рассмотреть Список рассылки пользователей .

1 голос
/ 01 августа 2009

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

...