在 RethinkDB 中使用 .lt() 和 .filter() 的二级索引

Using secondary index for .lt() with .filter() in RethinkDB

目前正在尝试通过使用 RethinkDB 来解决一个问题,通过使用 [=25= 找到那些具有小于给定值的 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

有什么方法可以像 .between().filter() 一样使用 .lt() 的二级索引?

文档中没有提到类似的内容。感谢您的帮助!

filter不使用二级索引,between应该是这里最好的选择。只需尝试使用 r.minval 来定义下键,那么它应该具有与 .lt(...)

相同的行为

https://rethinkdb.com/api/javascript/between

You may also use the special constants r.minval and r.maxval for boundaries, which represent “less than any index key” and “more than any index key” respectively. For instance, if you use r.minval as the lower key, then between will return all documents whose primary keys (or indexes) are less than the specified upper key.

r.db("databasename")
  .table("tablename")
  .between(r.minval, new Date(), { index: "createdAt" })