过滤以完全匹配数组
Filter to match array exactly
我的文档包含一个数组,例如;
{
"a": [ 2, 3 ],
"id": ...
}
我只想 return a
仅包含元素 2 和 3 的文档。
这是我找到的最简单的;
r.table("t").filter(r.row('a').difference([2,3]).eq([]))
有没有更好的方法?
编写相同函数的一个好方法是使用 .isEmpty
而不是 .eq([])
。
r.table("t")
.filter(r.row('a').difference([2,3]).isEmpty())
这个查询等同于你写的函数。
话虽如此,您当前的查询 returns 文档 where a 只有 2 and/or 3。因此,例如,带有 [=16 的文档=] 会匹配。
示例结果集:
{
"a": [ 2 ] ,
"id": "f60f0e43-a542-499f-9481-11372cc386c8"
} {
"a": [ 2, 3 ] ,
"id": "c6ed9b4e-1399-47dd-a692-3db80df4143c"
}
这可能是您想要的,但是如果您只想要 a
属性 恰好是 [2, 3]
或 [3, 2]
并且不包含其他元素的文档,您可能只想使用 .eq
:
r.table("t")
.filter(r.row('a').eq([2,3]).or( r.row('a').eq([3, 2]) ))
示例结果:
{
"a": [ 2, 3 ] ,
"id": "c6ed9b4e-1399-47dd-a692-3db80df4143c"
}, {
"a": [ 3, 2 ] ,
"id": "cb2b5fb6-7601-43b4-a0fd-4b6b8eb83438"
}
我的文档包含一个数组,例如;
{
"a": [ 2, 3 ],
"id": ...
}
我只想 return a
仅包含元素 2 和 3 的文档。
这是我找到的最简单的;
r.table("t").filter(r.row('a').difference([2,3]).eq([]))
有没有更好的方法?
编写相同函数的一个好方法是使用 .isEmpty
而不是 .eq([])
。
r.table("t")
.filter(r.row('a').difference([2,3]).isEmpty())
这个查询等同于你写的函数。
话虽如此,您当前的查询 returns 文档 where a 只有 2 and/or 3。因此,例如,带有 [=16 的文档=] 会匹配。
示例结果集:
{
"a": [ 2 ] ,
"id": "f60f0e43-a542-499f-9481-11372cc386c8"
} {
"a": [ 2, 3 ] ,
"id": "c6ed9b4e-1399-47dd-a692-3db80df4143c"
}
这可能是您想要的,但是如果您只想要 a
属性 恰好是 [2, 3]
或 [3, 2]
并且不包含其他元素的文档,您可能只想使用 .eq
:
r.table("t")
.filter(r.row('a').eq([2,3]).or( r.row('a').eq([3, 2]) ))
示例结果:
{
"a": [ 2, 3 ] ,
"id": "c6ed9b4e-1399-47dd-a692-3db80df4143c"
}, {
"a": [ 3, 2 ] ,
"id": "cb2b5fb6-7601-43b4-a0fd-4b6b8eb83438"
}