CouchDB视图中的范围键

时间:2010-06-20 11:21:51

标签: couchdb

我正在使用CouchDB存储有关事件的数据。每个活动都有开始日期/时间和结束日期/时间。我现在想创建一个视图,它允许我获取在特定日期/时间发生的所有事件的列表。但是这些事件没有一个日期,它们可以在几天内完成。

现在我不知道如何在我的视图功能中反映这一点。不幸的是,我需要在分钟级别上进行粒度分析,因此每分钟发出一个密钥可能不是一个有效的解决方案。那我怎么能这样做呢?

提前致谢!

2 个答案:

答案 0 :(得分:8)

好的,无论如何,这是一个解决方案!我只是和CouchDB的Jan(Lehnardt)打成平手,他告诉我,我可以在地图中多次emit()。直到现在我都不知道的东西。

为了让自己更容易,我假设你的结束和开始时间已经是TIMESTAMP值。如果没有,您需要在地图中转换它们或通常切换到它们。

我也会假设一个事件在整分钟开始(例如16:51:00)而不是16:51:23。在结束日期相同。

示例文件:

{
    "_id"   : "super-random-id",
    "name"  : "event 1",
    "start" : "TIMESTAMP",
    "end"   : "TIMESTAMP"
}

这是地图:

function (doc) {
    if (doc.start == undefined || doc.end == undefined) {
        return;
    }
    var current = doc.start;
    while (current <= doc.end) {
        emit(current, doc.id);
        current = current + 60; // increment by 1 minute
    }
}

然后使用startkeyendkey进行查询应该很容易。您可以在这里添加_list

答案 1 :(得分:4)