首页 > 解决方案 > CouchDB 按日期过滤会跳过某些日期

问题描述

我正在尝试在某些日期之间从 CouchDB 获取数据,并且大多数情况下效果很好,但是总是会跳过某些日期(即使它们在范围内),并且我没有得到这些日期的任何数据。

但是,当我只选择我无法进入该范围的特定日期时,我会返回结果。我的卷曲在范围和特定日期选择中完全相同。

调用 CouchDB 函数 (by_date)

  if(doc.type === 'employee')
  emit(doc.year + "-" + doc.month + "-" + doc.day, 
  {name:doc.name,
  email:doc.email, 
  department:doc.department,
  comment:doc.comment,
  nominator:doc.nominator, 
  values:doc.values, 
  type:doc.type, 
  team:doc.team
  });
}


范围卷曲

http://some-domain/some-database/_design/nominees/_view/by_date?&&startkey="2019-6-1"&&endkey="2019-8-16"


特定日期的卷曲

http://some-domain/some-database/_design/nominees/_view/by_date?&&startkey="2019-8-2"&&endkey="2019-8-2"


Curl for rage 会返回除 2019-8-2 之外的所有数据,即使它在范围内。


特定日期的卷曲返回 2019-8-2 的数据。


我希望能够在选定的范围内获得这个日期,但我不确定这里有什么问题。

标签: couchdbdate-range

解决方案


看起来您正在将日期作为字符串进行比较并且没有得到正确的结果。

这意味着“2019-08-2”<“2019-8-2”,这不是你想要的。

您需要正确地对月份和日期进行零填充,或者将日期转换为数字,例如纪元秒,或者发出矢量键:

emit([doc.year, doc.month, doc.day], ...);

(前提是 .year .month .day 在原始文档中是整数而不是字符串)。


推荐阅读