查找其他 table 未引用的文档
Find documents not referenced by another table
有点像 "not_eq_join",如果说得通的话。
A 有一个 table A
文档包含一个 _key
字段(它是主键),另一个 table B
有一个refs
字段指向 A._key
,顺便说一句,这是一个多索引,因此它可能包含对 A
中文档的多个引用。 A很大,B不大(可能小于1000)
A
中的条目:
{
'_key': 'doc1',
...
}
B
中的条目:
{
'refs': ['doc1'],
...
}
问题是;我如何在 A
中找到被 B
中的任何文档引用的 而不是 的文档?
我天真的解决方案是从 B.refs
多索引中检索所有唯一值(但该怎么做?)到数组变量,然后执行类似的操作:.filter(refArray.contains(R.row['_key']).not_())
A
选择(也按其他条件筛选)。
但这似乎是错误的,有更好的想法吗?
当然,我愿意这样做"as quickly as possible" :)
假设 B
引用的文档数量很少,您的解决方案可能是最好的。
您可以通过写r.table('B').distinct({index: 'refs'})
.
来获取索引(包括多索引)中的不同值
如果 B
引用的文档数量与 A
的大小相比很大,这就很难有效地做到这一点。
有点像 "not_eq_join",如果说得通的话。
A 有一个 table A
文档包含一个 _key
字段(它是主键),另一个 table B
有一个refs
字段指向 A._key
,顺便说一句,这是一个多索引,因此它可能包含对 A
中文档的多个引用。 A很大,B不大(可能小于1000)
A
中的条目:
{
'_key': 'doc1',
...
}
B
中的条目:
{
'refs': ['doc1'],
...
}
问题是;我如何在 A
中找到被 B
中的任何文档引用的 而不是 的文档?
我天真的解决方案是从 B.refs
多索引中检索所有唯一值(但该怎么做?)到数组变量,然后执行类似的操作:.filter(refArray.contains(R.row['_key']).not_())
A
选择(也按其他条件筛选)。
但这似乎是错误的,有更好的想法吗?
当然,我愿意这样做"as quickly as possible" :)
假设 B
引用的文档数量很少,您的解决方案可能是最好的。
您可以通过写r.table('B').distinct({index: 'refs'})
.
如果 B
引用的文档数量与 A
的大小相比很大,这就很难有效地做到这一点。