Date CouchDB未更新即将发生和过去事件的视图
我在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(); } } 因此,在这种情况下,视图将
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。