我有以下格式的沙发基础文件
{
"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"
}
}
}
其中有工作安排。作业可以在 fromTime 和 toTime 之间的任何时间执行。我的任务是每小时检查一下是否有任何未完成工作时间。表示无论 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"
请在我出错的地方帮助我。
答案 0 :(得分:1)
您提供的startkey / endkey组合将在所有非平凡的情况下产生空结果。想象一下(简单地缩写为2位数)当前时间为18,下一个小时为19.然后你的字符串是:
required
按字典顺序,startkey大于endkey,因此间隔为空。
在我看来,最简单的方法是创建两个单独的视图,一个只发出fromTime,另一个发出toTime。如果我理解了正确的要求,你将搜索从现在到现在+ 1小时之间的所有作业,对于toTime,同时执行两个结果的程序集合。
使用一个视图可能更简单,并且,对于每个scheduledJob,执行2次发射,其中一个是fromTime,另一个是toTime。但是我从未尝试过对文档执行多次发射,因此您必须尝试它是否有效。
您将数字值转换为字符串的方式对我来说非常容易出错。如果需要一个复合键,我更喜欢一个合适的沙发座复合键,这可以通过例如startkey 18_00
endkey 00_19
。但是我没有看到使用这种密钥解决问题的简单方法。