过滤以准确匹配数组

时间:2015-04-17 17:01:10

标签: rethinkdb

我的文档包含一个数组,例如;

{
    "a": [ 2, 3 ],
    "id":  ...
}

我想仅返回a仅包含元素2和3的文档。

这是我发现的最简单的;

r.table("t").filter(r.row('a').difference([2,3]).eq([]))

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

编写相同函数的一种好方法是使用.isEmpty而不是.eq([])

r.table("t")
 .filter(r.row('a').difference([2,3]).isEmpty())

此查询等同于您编写的函数。

话虽如此,您当前的查询会返回文档,其中a只有2和/ 3.因此,例如,带有a: [2]的文档会匹配。

示例结果集:

{
  "a": [ 2 ] ,
  "id":  "f60f0e43-a542-499f-9481-11372cc386c8"
} {
  "a": [ 2, 3 ] ,
  "id":  "c6ed9b4e-1399-47dd-a692-3db80df4143c"
}

这可能是您想要的,但如果您只想要a属性为[2, 3][3, 2]的文档并且不包含其他元素,那么您可能只想使用{ {1}}:

.eq

示例结果:

r.table("t")
 .filter(r.row('a').eq([2,3]).or( r.row('a').eq([3, 2]) ))