问题描述
目前正在尝试通过使用 RethinkDB 来解决问题,使用 .lt()
查找具有小于给定值的 createdAt
日期键的对象。
以下查询在 .filter()
和 .lt()
中运行良好:
r.db("databasename")
.table("tablename")
.filter(r.row("createdAt").lt(new Date()))
使用 .between()
我可以按预期传递 index
:
r.db("databasename")
.table("tablename")
.between(new Date("2020-01-01"),new Date(),{ index: "createdAt" })
但我仍然需要传递一个较低的值 (2020-01-01
) 以及与 .lt()
不同的值。
问题:
即使使用 .filter()
和 .lt()
的第一个查询按预期工作,唯一的问题是它没有使用我创建的 secondary index。
有没有什么办法可以像 .lt()
一样使用 .between()
的二级索引,或者以某种方式与 .filter()
一起使用?
文档没有提到类似的东西。任何帮助表示赞赏!
解决方法
filter
不使用二级索引,between
应该是这里的最佳选择。只需尝试使用 r.minval
定义下键,那么它应该具有与 .lt(...)
https://rethinkdb.com/api/javascript/between
您还可以使用特殊常量 r.minval
和 r.maxval
作为边界,它们分别代表“小于任何索引键”和“大于任何索引键”。例如,如果您使用 r.minval
作为下键,则 between 将返回主键(或索引)小于指定上键的所有文档。
r.db("databasename")
.table("tablename")
.between(r.minval,new Date(),{ index: "createdAt" })