gpt4 book ai didi

javascript - Couchbase View 过滤日期范围内的数据

转载 作者:行者123 更新时间:2023-11-30 16:14:32 25 4
gpt4 key购买 nike

我有以下格式的 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 也从当前时间戳落到下一小时时间戳,我们应该获取。

我是 couchbase 的新手。我创建的 View 是

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"

请帮助我哪里出错了。

最佳答案

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

startkey 18_00
endkey 00_19

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

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

只使用一个 View 可能会更简单,并且对于每个 scheduledJob,执行 2 次发出,一次是 fromTime,另一个是 toTime。但我从未尝试过在文档上执行超过 1 次 emit,所以你必须尝试它是否有效。

在我看来,您将数字值转换为字符串的方式很容易出错。如果需要复合键,我更喜欢使用合适的 couchbase 复合键,例如通过发出([job.fromTime, job.toTime], job)。但是我没有看到使用那种 key 可以轻松解决您的问题。

关于javascript - Couchbase View 过滤日期范围内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com