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 时间类型,以便使用以下一些函数轻松操作:
- iso8601时间:http://rethinkdb.com/api/javascript/iso8601/
- epoch_time: http://rethinkdb.com/api/javascript/epoch_time/
或者只是尝试 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 作为一个项目已被删除,但将开源。如果您需要支持,请考虑为您的项目提供其他资源。
我试图只查询不到一天的东西...在 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 时间类型,以便使用以下一些函数轻松操作:
- iso8601时间:http://rethinkdb.com/api/javascript/iso8601/
- epoch_time: http://rethinkdb.com/api/javascript/epoch_time/
或者只是尝试 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中进行比较