Ibm cloud Cloudant查看带有日期的异常条件行为

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

我发现了一些奇怪的行为,我想知道是否有人能帮助我理解它,从而避免将来出现类似的问题

创建cloudant视图时,我只想返回带有当前日期时间戳的记录

我很难让它工作,发现区别在于在if条件结束之前有一个空间

有关工作和不工作的信息,请参见下文

 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]