Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date CouchDB未更新即将发生和过去事件的视图_Date_View_Couchdb - Fatal编程技术网

Date CouchDB未更新即将发生和过去事件的视图

Date CouchDB未更新即将发生和过去事件的视图,date,view,couchdb,Date,View,Couchdb,我在couchdb上有以下视图,它只返回日期大于当前日期的文档,如: function (doc) { var eventDay = new Date(new Date(doc.start).toDateString()), currentDay = new Date(new Date().toDateString()); if (eventDay > currentDay) { emit(); } } 因此,在这种情况下,视图将

我在couchdb上有以下视图,它只返回日期大于当前日期的文档,如:

function (doc) {

    var eventDay = new Date(new Date(doc.start).toDateString()),
        currentDay = new Date(new Date().toDateString());

    if (eventDay > currentDay) {
       emit();
    }
}
因此,在这种情况下,视图将始终仅显示未来(即将发生的)事件。我也有同样的倒置视图,只显示过去的事件。但问题是,第二天显然没有更新视图。因此,我必须通过添加一些换行符来手动更新视图,因此我猜这会导致“刷新”

有什么办法可以让这一切顺利进行吗


非常感谢

不要忘记,每个条目的映射代码都是在文档创建/更改时执行的,因此对于您认为的“currentDay”,您不会有一致的值

相反,您必须构建一个视图,允许您在查询期间添加此信息。以下是一个例子:

funciton(doc){

    //Extract from date object.
    var year = ..;
    var month = ..;
    var day = ..;
    //..

    emit([year,month,day], null);
}

这将创建一个按(年、月、日)排序的复杂索引。现在可以使用startkey/endkey查询部分范围,例如将来的所有日期。有关详细信息,请参阅View API:

非常感谢您的PartlyCloudy。您的意思是在创建或更新文档之前不会刷新视图?因此,需要使用开始键和结束键进行查询,因为这些值每天都会不同,然后输出一致的结果?将视图索引视为一个排序列表,该列表将随着更改而增量更新-插入新文档,重新插入更改的文档。您的“当前日期”属性是您在查询期间需要的,而不是在构建视图时需要的。简而言之,您将拥有一个按日期排序的长文档列表,并使用开始键和结束键查询部分范围。没错,视图是一种为原始数据构建完全静态索引的方法。索引可以随着文档的更改而增量更新,但在大多数情况下,它处于静止状态。查询视图时,CouchDB总是扫描索引。这是快速和可预测的。您拥有的唯一控件是每个查询的
startkey
endkey
。@b_erb函数在您的答案中被拼错为function。