3

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

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

如果可能的话,我已经四处搜索,无法弄清楚地图/减少来做到这一点。

4

3 回答 3

4

在我完全理解视图的工作原理之前,我最初遇到了这种问题。

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

那么如何将视图中的值与用户提交的值进行比较呢?秘诀是将该字段作为 map 函数中的键发出,并依靠让 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 中的引号和空格进行了 uriEncoding,以便它可以按原样使用。

于 2011-07-01T13:44:52.460 回答
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"

Wiki上的HTTP 视图 API页面有更多信息。您也可以考虑用户邮件列表

于 2009-05-08T05:08:49.640 回答
1

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

于 2009-07-31T22:45:04.963 回答