我在CB中有一份文件,其中有两个日期,即开始日期和结束日期。比方说,产品的价格折扣。从今天开始10%折扣,下周五结束。如何从CB获得今天有效折扣的所有文件?
我提出了一个观点并在其中包含以下内容:
var dt = new Date();
今天的日期。然后我可以做一个简单的
if(doc.FromDate < dt && doc.ToDate > dt){ emit([ ..... ]);
这会根据我的需要过滤文档。但...
问题
这是一个很好的方法重新查看和索引更新?由于日期发生了变化,索引会每天更新吗?只是试图了解CB在这方面的工作
此类搜索的最佳方法是什么?如果不可能请告诉我!
干杯
罗宾
答案 0 :(得分:5)
让我在这里澄清一下:
map()函数用于在磁盘上创建/更新索引,这只是在“文档”保存在磁盘上之后发生。这就是为什么在map中使用date.now()减少并没有多大意义。
所以你要做的是发出日期例如emit(dateToArray(doc.startDate));
然后当您查询视图(索引)时,您可以使用startkey&amp;结束键进行范围查询。
&安培; startkey = [2013,4,16]&安培; endkey = [2013,4,24]
答案 1 :(得分:2)
索引不会因为系统日期更改而更新,您必须更新文档。视图索引器也不允许您传递用户定义的任何参数。在这种情况下,您应该发出数据并使用日期作为键的一部分来过滤视图查询。我猜SQL索引的行为也是一样的。你无法预测这个文档究竟何时会被编入索引,在你的例子中,当你的文档被编入索引时,你是冻结的时间戳,甚至不是它被更改的时间