Ibm cloud Cloudant查看带有日期的异常条件行为
我发现了一些奇怪的行为,我想知道是否有人能帮助我理解它,从而避免将来出现类似的问题 创建cloudant视图时,我只想返回带有当前日期时间戳的记录 我很难让它工作,发现区别在于在if条件结束之前有一个空间 有关工作和不工作的信息,请参见下文Ibm cloud Cloudant查看带有日期的异常条件行为,ibm-cloud,cloudant,Ibm Cloud,Cloudant,我发现了一些奇怪的行为,我想知道是否有人能帮助我理解它,从而避免将来出现类似的问题 创建cloudant视图时,我只想返回带有当前日期时间戳的记录 我很难让它工作,发现区别在于在if条件结束之前有一个空间 有关工作和不工作的信息,请参见下文 if (new Date(Date.parse(doc.details.timestamp)).setHours(0,0,0,0) === new Date().setHours(0,0,0,0) ){ 用于根据Cloudant文档日期检查当前日期 i
if (new Date(Date.parse(doc.details.timestamp)).setHours(0,0,0,0) === new Date().setHours(0,0,0,0) ){
用于根据Cloudant文档日期检查当前日期
if (new Date(Date.parse(doc.details.timestamp)).setHours(0,0,0,0) === new Date().setHours(0,0,0,0)){
无法根据Cloudant文档日期检查日期
if (new Date(Date.parse(doc.details.timestamp)).setHours(0,0,0,0) === new Date().setHours(0,0,0,0)){
下面是上下文的完整工作视图
function (doc) {
if (doc.details.location){
if (new Date(Date.parse(doc.details.timestamp)).setHours(0,0,0,0) === new Date().setHours(0,0,0,0) ){
emit(doc.details.location.toLowerCase(), { "location": doc.details.location.toLowerCase(), "status": doc.details.status, "user": doc.details.username, "time": doc.details.timestamp})
}
}
}
祝你一切顺利
Scott。我怀疑这可能与
if
语句的执行日期/时间有关,而不是与涉及的空间有关
无论执行时间如何,map
函数都需要具有确定性
看起来您在猜测map
函数在查询时运行(因此newdate
将发出今天的日期)。相反,它在索引时间运行,因此newdate
的值是索引发生时的日期时间。由于索引在文档插入的不同时间运行(插入和查询视图之间的某个时间),因此使用随时间变化的任何形式的值都会产生不可预测的结果
因此,我怀疑空间是附带的,相反,newdate
的输出正在改变,从而改变了向视图中发出的内容
对于您的问题--查询“今天”的内容--我想您应该发出一个键,如[location,year,month,day]
。您的映射函数如下所示:
function (doc) {
if (doc.details.location) {
var l = doc.details.location.toLowerCase();
var d = Date.parse(doc.details.timestamp);
emit([l, d.getFullYear(), d.getMonth(), d.getDate()], {
"location": l,
"status": doc.details.status,
"user": doc.details.username,
"time": doc.details.timestamp
});
}
}
由于JavaScript对当月使用基于0的索引,要在今天2017年2月2日查询位置Bristol
的所有项目,您需要在查询视图时使用key=[“Bristol”,2017,1,2]