【问题标题】:Couchbase document dates search - DateTime.Now()Couchbase 文档日期搜索 - DateTime.Now()
【发布时间】:2013-05-04 08:17:53
【问题描述】:

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

我做了一个视图,里面有以下内容:

var dt = new Date();

获取今天的日期。然后我可以做一个简单的

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

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

问题

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

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

干杯

罗宾

注意:请注意,问题不是herehere

【问题讨论】:

    标签: couchbase


    【解决方案1】:

    让我在这里澄清一些事情:

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

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

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

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

    【讨论】:

    • 嘿,谢谢。是的,我完全忘记了日期。现在它是“静态的”。我的错。!我想这样做的唯一方法是在发射中有两个值->发射[(doc.from,doc.to),null]。我可以使用的“最小”(过去最多)日期是多少。 IE。 “开始日期”可以是昨天或之前的任何日期。我需要今天日期> = 从日期开始的所有记录。我不能通过 [null, 2013/4/5] 因为 null 会让我一切正常并忽略结束键?处理从左到右的原则 re 键。
    • 不确定是否理解问题,但您使用的日期只是 Javascript 日期,因此您可以使用此处定义的日期:developer.mozilla.org/en/docs/JavaScript/Reference/…
    【解决方案2】:

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

    【讨论】:

    • 您好,谢谢您的回复。我还是有点困惑。我怎样才能获得日期“范围”包括今天的文件?我不能使用开始和结束键,因为今天不一定匹配“开始”和“结束”日期。所以你在这方面的建议不会奏效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多