我只想质疑不到一天的东西.在JS中,这会返回true;为什么要重新考虑不返回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" )没有返回日期字符串..。我应该用什么代替那里呢?
发布于 2015-10-05 17:51:34
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-20 17:17:37”
T的第一个实例将上述组替换为空格或“”。
这将字符串设置为能够在重新思考db内部进行比较。
注意: RethinkDB作为一个项目已经被删除,但将是开源的。如果需要支持,请考虑项目的其他资源。
发布于 2015-10-01 02:31:30
我想你误解了ReQL。过滤器函数应该在服务器上运行,而不是在客户端上运行。
你必须把它改为:
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(一天有多少秒)
用函数样式写的将是
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时间类型,以便轻松地使用以下函数进行操作:
或者试着把你的时间放在这里,我们会帮你的。
https://stackoverflow.com/questions/32874051
复制相似问题