ArangoDB 获取两个日期之间的文档

d6kp6zgx  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(139)

在我的集合中,我有一些文档,它们的值之一是created_on键,在创建文档时用时间戳填充。
我想检索两个日期之间创建的文档,但我不能得到它在一个简单的方式,我有下一个:

FOR d IN mycollection
FILTER '2021-12-01' <= DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd") <= '2021-12-05'
SORT d.created_on ASC 
RETURN DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd")

但上面的查询将返回所有记录,而不仅仅是指定时间段内的文档。
有什么建议吗?提前感谢!

qjp7pelc

qjp7pelc1#

问题是你的过滤器表达式'2021-12-01' <= DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd") <= '2021-12-05'基本上和

LET x = '2021-12-01' <= DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd")
FILTER x <= '2021-12-05'

x是一个布尔值,因此总是比字符串小。
您应该将查询重写如下:

FOR d IN mycollection
  LET date = DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd")
  FILTER '2021-12-01' <= date AND date <= '2021-12-05'
  SORT d.created_on ASC 
  RETURN DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd")

这应该可以正确过滤,但是你不能为FILTER使用created_an上的任何索引,只能为SORT使用。因此,最好将查询编写为:

LET from = DATE_TIMESTAMP('2021-12-01')
LET to = DATE_TIMESTAMP('2021-12-05')
FOR d IN mycollection
  FILTER from <= d.created_on AND d.created_on <= to
  SORT d.created_on ASC 
  RETURN DATE_FORMAT(d.created_on, "%yyyy-%mm-%dd")

相关问题