CouchDB 按日期过滤会跳过某些日期

CouchDB filter by date skips certain dates

我正在尝试从某些日期之间的 CouchDB 获取数据,并且对于大多数数据来说它工作得很好,但是某些日期总是被跳过(即使它们在范围内)并且我没有得到任何数据这些日期。

然而,当我 select 只有我无法在范围内获得的特定日期时,我会得到结果。我的卷曲在范围和特定日期选择上完全相同。

调用了 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"


卷曲愤怒 returns 除了 2019-8-2 的数据之外的所有数据,即使它在范围内。


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


我希望能够在 selected 范围内获取此日期,但我不确定这里的问题是什么。

看起来您是在将日期作为字符串进行比较,但结果不正确。

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

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

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

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