【问题标题】:Couchbase view to filter data between date range用于过滤日期范围之间的数据的 Couchbase 视图
【发布时间】:2016-06-13 11:57:02
【问题描述】:

我有以下格式的 couchbase 文档

{
  "docType": "scheduledJob",
  "orgId": 2,
  "jobs": {
    "1456753078157": {
      "jobName": "Job1",
      "jobId": "910271049",
      "fromTime": 1456752600000,
      "toTime": 1456824600000,
      "key": 1456753141401,
      "status": "pending"
    },
    "1456753141401": {
      "jobName": "Job2",
      "jobId": "558624841",
      "fromTime": 1456752600000,
      "toTime": 1456821000000,
      "key": 1456753141401,
      "status": "pending"
    }
  }
}

已安排作业。这些作业可以在 fromTimetoTime 之间的任何时间执行。我的任务是每小时检查一小时内是否有待处理的工作。表示无论 fromTime 是什么,但 toTime 时间戳应大于当前时间后 1 小时的时间戳。同样,如果 fromTime 也从当前时间戳下降到下一小时时间戳,我们应该获取。

我是沙发底座的新手。我创建的视图是

function(doc, meta){  
  if( doc.docType && doc.docType=="scheduledJob"){
    for(var key in  doc.jobs){
      var job = doc.jobs[key]
      if(job.status == "pending") {
    emit(job.fromTime+'_'+job.toTime, job);
      }
    }

  }

}

我正在发送 startkey="currentTimestamp_0000000000000" 和 endkey="0000000000000_currentTime+1hour-timestamp"

请帮助我哪里出错了。

【问题讨论】:

  • 你能澄清一下吗?你的意思是你真的不在乎从时间?还是 fromTime 应该大于“现在”?

标签: javascript couchbase couchbase-view nosql


【解决方案1】:

您提供的 startkey/endkey 组合在所有重要的情况下都会产生空结果。想象一下(为简单起见,缩短为 2 位数)当前时间为 18,下一小时为 19。那么你的字符串是:

startkey 18_00
endkey   00_19

按字典顺序,startkey大于endkey,所以区间为空。

在我看来,最简单的方法是创建两个单独的视图,一个只发出 fromTime,另一个发出 toTime。如果我理解正确的要求,您将搜索从现在到现在 + 1 小时之间具有 fromTime 的所有工作,对于 toTime 也是如此,然后对这两个结果进行编程集合并集。

只使用一个视图可能更简单,并且对于每个 scheduleJob,执行 2 个发射,一个 fromTime,另一个用于 toTime。但是我从来没有尝试过对一个文档进行超过 1 次的发射,所以你必须尝试它是否有效。

在我看来,您将数值转换为字符串的方式很容易出错。如果需要复合键,我更喜欢适当的 couchbase 复合键,例如通过emit([job.fromTime, job.toTime], job)。但我没有看到使用这种密钥的简单解决方案。

【讨论】:

  • 这个答案很好而且很典型。在这种情况下,condider 使用一个键(fromTime 或 toTime)来获取结果,然后过滤掉另一个优于 union 的两个结果:1. 发射(fromTime,toTime)使用 fromTime 范围,2. 使用 toTime 过滤 1 的结果。另一个更新程序应该将 status=pending 更改为其他值。
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多