如何使用.contains与数组?

时间:2016-11-09 20:34:28

标签: rethinkdb rethinkdb-javascript

我在包含用户ID列表的文档中有一个数组 我想查找包含此用户ID列表的所有文档。

我知道我可以这样做:

r.db('unicorn')
  .table('rooms').filter(function(doc){
    return doc('people').contains(
      "id-one","id-two"
      )
  })

我知道这会很好用,但我必须硬编码。如何传递contains函数的值数组以匹配?

2 个答案:

答案 0 :(得分:5)

经过一番挖掘,最简单的解决方案是使用args。从例子中有点不明显。这样我就可以传递动态值并用它们运行命令。

r.db('unicorn')
  .table('rooms').filter(function(doc){
    return doc('people').contains(
      r.args(["id-one","id-two"]) 
      )
  })

答案 1 :(得分:1)

您可以使用setIntersection并传递数组:

r.db('unicorn')
  .table('rooms').filter(function(doc){
      return doc('people').default([]).setIntersection(
         ["id-one","id-two"]
      ).count().eq(2)
  })

所以,如果你有数组:

var myArr =  ["id-one","id-two"];

你可以写这样的查询:

r.db('unicorn')
  .table('rooms').filter(function(doc){
      return doc('people').default([]).setIntersection(myArr).count().eq(myArr.length)
  })