3

我在 CB 中有一个文档,其中有两个日期,一个开始日期和一个结束日期。比方说,产品的价格折扣。10% 折扣从今天开始到下周五结束。我如何从 CB 获得今天有有效折扣的所有文件?

我做了一个视图,其中包含以下内容:

var dt = new Date();

哪个得到今天的日期。然后我可以做一个简单的

if(doc.FromDate < dt && doc.ToDate > dt){ emit([ ..... ]);

这会过滤我想要的文档。但...

问题

这是审查和索引更新的好方法吗?索引会因为日期改变而每天更新吗?只是想了解CB在这方面的工作

这种搜索的最佳方法是什么?如果不可能,请告诉我!

干杯

罗宾

注意:请注意,问题不是这样here或this here

4

2 回答 2

5

让我在这里澄清一点:

  • map() 函数用于在磁盘上创建/更新索引,这发生在文档保存在磁盘上“之后”。这就是为什么在 map reduce 中使用 date.now() 并没有真正意义的原因。

  • 所以你要做的是发出日期,例如 emit( dateToArray(doc.startDate) );

  • 然后当您查询视图(索引)时,您可以使用 startkey 和 endkey 进行范围查询。

&startkey=[2013,4,16]&endkey=[2013,4,24]

于 2013-05-06T17:16:03.793 回答
2

索引不会因为系统日期更改而更新,您必须更新文档。还查看索引器不允许您传递用户定义的任何参数。在这种情况下,您应该发出数据并使用日期作为键的一部分来过滤视图查询。我猜 SQL 索引也有同样的行为。您无法预测该文档何时会被索引,在您的示例中,您正在冻结文档被索引时的时间戳,甚至不是更改它的时间

于 2013-05-04T13:34:46.597 回答