rethinkdb 查询中的过滤器、求和和 div

filter, sum and div in rethinkdb query

我如何将这两个查询连接在一起...我的意思是在一定时间内获得点击率...我尝试了不同的方法来解决它但找不到任何方法在 rethinknDB 中编写查询...

**r.expr({total_page_position:r.table('test_pagol')('position').sum(), total_page_load: r.table('test_pagol')('page').sum()}).merge({CRT: r.row('total_page_load').div(r.row('total_page_position'))**


**r.table("test_pagol").filter(
    (r.row["timestamp"] >= 1429617902988)
    & (r.row["timestamp"] >= 1429617922119))**

您可以为此使用 mapreduce 命令:

r.table("test_pagol").filter(
    r.row("timestamp").ge(1429617902988)
    .and(r.row("timestamp").le(1429617922119))
).map({
    'total_page_position': r.row('position'),
    'total_page_load': r.row('page')
}).reduce(function(left, right) {
    return {
        'total_page_position': left('total_page_position').add(right('total_page_position')),
        'total_page_load': left('total_page_load').add(right('total_page_load'))
    }
}).merge({
    'CRT': r.row('total_page_load').div(r.row('total_page_position'))
})

有关 map 的更多信息: http://www.rethinkdb.com/api/javascript/map/ 有关 reduce 的更多信息: http://www.rethinkdb.com/api/javascript/reduce/

(一个不相关的注释:如果你想让这个查询更快,你可以在 timestamp 字段上创建一个索引并将 filter 替换为 between(1429617902988, 1429617922119, {index: "timestamp", rightBound="closed"}),请参阅 http://www.rethinkdb.com/api/javascript/between/ )