RethinkDB JavaScript 日期过滤器

RethinkDB JavaScript Date Filter

我试图只查询不到一天的东西...在 JS 中,这 returns 是;为什么rethink不返回true,所以也不返回任何结果?

r.db( "db" ).table("table")
  .filter( function (item) {
    var
        now = new Date(),
        then = new Date( item.upload_date );
    return now - then > 1000*60*60*24
  });

我也试过这个:

r.db( "db" ).table("table")
  .filter( function (item) {
    var
        now = new Date(),
        then = new Date( item( "upload_date") );
    return now - then > 1000*60*60*24
  });

编辑:肯定是我的 item( "upload_date" ) 没有返回日期字符串...我应该在那里使用什么?

我认为您误解了 ReQL。过滤器功能应该是 运行 在服务器上,而不是在您的客户端上。

你必须把它改成这样:

r.db( "db" ).table("table")
  .filter(r.now().sub(r.row('upload_date')).lt(60*60*24))

r.now()returns当前时间,假设upload_date存储在原生RethinkDB时间,可以减去两个时间值,结果是经过了多少秒。然后可以和60*60*24(一天多少秒)比较

写成函数式会是

r.db( "db" ).table("table")
  .filter(function(item) {
     return r.now().sub(item('upload_date')).lt(60*60*24))
  })

它的写法看起来像原始的 JavaScript 可能会让人感到困惑。但事实并非如此。事实上,客户端驱动程序将在客户端评估函数,构建查询,将其转换为 RethinkDB 理解的 JSON 字符串并将其发送到服务器。它不会 运行 在客户端执行比较逻辑。它使用 http://rethinkdb.com/api/javascript. More information about how driver works: http://rethinkdb.com/docs/writing-drivers/

上可用的 API 生成一个 JSON 字符串来告诉 RethinkDB 它想要什么

其次,如果您 upload_date 不在本地 RethinkDB 时间对象中,您可以尝试将其转换为 RethinkDB 时间类型,以便使用以下一些函数轻松操作:

或者只是尝试 post 您在这里的时间,我们会帮助您。

ReQL 足够智能,可以解析字符串并对它们进行排序。如果您的日期格式正确,它仍应在行上使用 .lt 进行过滤。

r.db("database").table("table")
    .filter( r.row('upload_date')
    .lt( new Date( new Date() - (24*60*60*1000) ).toISOString().replace(/\..{4}/, '').replace(/T/, ' ') ) )

--
干杯

--编辑--

(学习或测试使用Regex101.com)

String.replace() 方法中请求的正则表达式:

FIRST - (转储结束时间码)

例如:“2017-03-20T17:17:37.966Z”->“2017-03-20T17:17:37”

  • 找到第一个文字句点。 \.
  • -> 之后任意 4 个字符.{4}

用空引号替换上面的组,或者什么都不替换

第二个 -

例如:“2017-03-20T17:17:37”->“2017-03-2017:17:37”

  • 找到字符的第一个实例T

用space字符或“”替换上面的组

这设置字符串可以在rethink db中进行比较

注意:RethinkDB 作为一个项目已被删除,但将开源。如果您需要支持,请考虑为您的项目提供其他资源。