首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RethinkDB JavaScript数据过滤器

RethinkDB JavaScript数据过滤器
EN

Stack Overflow用户
提问于 2015-09-30 19:22:00
回答 2查看 2.6K关注 0票数 5

我只想质疑不到一天的东西.在JS中,这会返回true;为什么要重新考虑不返回true,也不返回任何结果?

代码语言:javascript
复制
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
  });

我也试过这个:

代码语言:javascript
复制
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" )没有返回日期字符串..。我应该用什么代替那里呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-05 17:51:34

ReQL足够聪明,可以解析字符串并对它们进行排序。如果您的日期格式是正确的,那么它仍然应该在行中使用.lt进行筛选。

代码语言:javascript
复制
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-20 17:17:37”

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

将上述组替换为空格或“”。

这将字符串设置为能够在重新思考db内部进行比较。

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

票数 4
EN

Stack Overflow用户

发布于 2015-10-01 02:31:30

我想你误解了ReQL。过滤器函数应该在服务器上运行,而不是在客户端上运行。

你必须把它改为:

代码语言:javascript
复制
r.db( "db" ).table("table")
  .filter(r.now().sub(r.row('upload_date')).lt(60*60*24))

r.now()返回当前时间,假设upload_date存储在本机RethinkDB时间,可以减去两个时间值,结果是经过多少秒。然后你可以比较60*60*24(一天有多少秒)

用函数样式写的将是

代码语言:javascript
复制
r.db( "db" ).table("table")
  .filter(function(item) {
     return r.now().sub(item('upload_date')).lt(60*60*24))
  })

它可能会混淆它的编写方式看起来像原始的JavaScript。但事实并非如此。实际上,客户端驱动程序将对客户端上的函数进行评估,以便将查询构建为RethinkDB理解的JSON字符串,并将其发送到服务器。它不运行在客户端来执行比较的逻辑。它生成一个JSON字符串,使用在RethinkDB上可用的API告诉http://rethinkdb.com/api/javascript它想要什么。有关驱动程序工作方式的更多信息:http://rethinkdb.com/docs/writing-drivers/

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

  • iso8601时间:http://rethinkdb.com/api/javascript/iso8601/
  • epoch_time:time/

或者试着把你的时间放在这里,我们会帮你的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32874051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档