我正在使用CouchDB存储有关事件的数据。每个活动都有开始日期/时间和结束日期/时间。我现在想创建一个视图,它允许我获取在特定日期/时间发生的所有事件的列表。但是这些事件没有一个日期,它们可以在几天内完成。
现在我不知道如何在我的视图功能中反映这一点。不幸的是,我需要在分钟级别上进行粒度分析,因此每分钟发出一个密钥可能不是一个有效的解决方案。那我怎么能这样做呢?
提前致谢!
答案 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
}
}
然后使用startkey
和endkey
进行查询应该很容易。您可以在这里添加_list
。
答案 1 :(得分:4)
我最终找到了一个使用GeoCouch的好解决方案:http://www.diretto.org/2010/08/efficient-time-based-range-queries-in-couchdb-using-geocouch/