CouchDB视图:created_at大于传递的值

时间:2009-05-08 03:55:53

标签: view couchdb mapreduce

我正在尝试编写一个couchdb视图,它以可排序的格式(2009/05/07 21:40:17 +0000)获取created_at时间戳,并返回所有具有更大created_at值的文档。

我特意使用couch_foo,但如果我能弄清楚如何编写视图,我可以在蒲团或couch_foo模型中创建它,而不是让couch_foo为我做。

如果可能的话,我四处搜索并无法弄清楚地图/减少这样做。

3 个答案:

答案 0 :(得分:4)

这是我在完全理解视图如何工作之前遇到的一种问题。

理解的关键是视图仅对文档的每个(修订版)运行一次。换句话说,当您查询视图时,不运行该函数,只需查找函数运行时的结果。因此,无法将任何用户提交的参数传递到视图中。

然后如何将视图中的值与用户提交的值进行比较?秘诀是将该字段作为地图函数中的键发出,并依赖于按键使用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

我冒昧地使用uriEncoding url中的引号和空格,以便它可以按原样使用。

答案 1 :(得分:3)

您希望编写一个视图,以该格式创建时间戳字段的键,然后使用startkey参数进行查询。

所以视图看起来像是:

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

您的网址就像:

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

HTTP view API上的Wiki页面提供了更多信息。您也可以考虑User Mailing List

答案 2 :(得分:1)

请注意,couchdb仅适用于json值。如果存储在couchdb中的文档的时区与startkey的时区不同,则查询可能会失败。