首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RethinkDB ReQL中两个数组的点击筛选器?

RethinkDB ReQL中两个数组的点击筛选器?
EN

Stack Overflow用户
提问于 2016-01-09 02:23:56
回答 1查看 109关注 0票数 0

给定表checkpointAttempts,使用模式:

代码语言:javascript
复制
{ 
  id: primary_key,
  userId: secondary_key & index,
  checkpointId: secondary_key & index
}

我试图在运行时找到与userIds数组和checkpointIds数组匹配的所有checkpointIds

我认为这样做可能会奏效:

代码语言:javascript
复制
// var userIds and checkpointIds are defined arrays & in scope

var q = r.table("checkpointAttempts");
q = q.getAll.apply(q, userIds.concat({index: userId}))
  .filter(function(attempt){
    return checkpointIds.indexOf(attempt('checkpointId')) !== -1
  })
  .run(conn)

但是,filter的谓词函数似乎总是返回false。

对于我做错了什么,或者如何以不同的方式构造这个查询,有什么建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-09 03:08:34

不能在筛选器函数中使用原始JavaScript (如indexOf )。您必须使用ReQL表达式和函数。

getAll上,您可以简单地用args包装所有参数,并消除apply将参数作为数组传递的需要。

正确的查询如下:

代码语言:javascript
复制
r.table('checkpointAttempts')
  .getAll(r.args(userIds), {index: 'userId'})
  .filter(function(attempt){
    return r.expr(checkpointIds).contains(attempt('checkpointId')).eq(true)
  })

只想在这里发布一些JS代码,以帮助您获得一个清晰的想法:

代码语言:javascript
复制
var r = require('rethinkdb')

userIds = [1,2]
checkpointIds = [14, 12]

r.connect().then(function(conn) {
  return r.table('checkpointAttempts')
  .getAll(r.args(userIds),{index: 'userId'})
  .filter(function(attempt){
    return r.expr(checkpointIds).contains(attempt('checkpointId')).eq(true)
  })
  .run(conn)
})
.then(function(cursor) {
  return cursor.toArray()
})
.then(function(d) {
  console.log(d)
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34689059

复制
相关文章

相似问题

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