0
例如,我的文檔包含一個數組;完全匹配數組的過濾器
{
"a": [ 2, 3 ],
"id": ...
}
我想只返回其a
僅包含元件2和3
這是我還沒有找到最簡單的文件;
r.table("t").filter(r.row('a').difference([2,3]).eq([]))
有沒有更好的方法?
例如,我的文檔包含一個數組;完全匹配數組的過濾器
{
"a": [ 2, 3 ],
"id": ...
}
我想只返回其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())
該查詢等同於您編寫的函數。
這就是說,您當前的查詢將返回文檔,其中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]
,不包含其他元素,您可能希望只使用.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"
}
嗨豪爾赫。在這種情況下,數組永遠不會少於2個元素,所以我認爲這是更好的解決方案,因爲.eq([2,3])比較需要首先對元素進行排序。這就是說,我錯過了isEmpty() - 謝謝! – cachvico
我更新了我的解決方案,只用'eq'來匹配'[2,3]'或'[3,2]',這樣答案就更準確了。 –
另外,我花時間回答你的問題,似乎我正確回答了它。我可能最好將它標記爲已回答:)。謝謝! –