我有 2 个这样的集合,作为A
1.5kk 文档集合:
A
_id
relation: { alias, ref: 'B/<_id>' }
B
_id
name
我想查询 中A
不存在的元素B
。这是我到目前为止得到的:
db.getCollection('A').aggregate([
{
$project: {
'relation.ref': {
$arrayElemAt: [
{ $split: ['$relation.ref', '/'] }, 1
]
},
a: "$$ROOT"
}
},
{
$lookup: {
from: 'B',
localField: 'relation.ref',
foreignField: '_id',
as: 'b'
}
}
]);
这确实以这种模式返回:
{
_id,
relation.ref,
a: {},
b: [{}]
}
好吧,我希望添加一个 $match 子句来仅包含 b 为空数组的子句。就像是${match: { b: {$size: 0} } }
问题是这个查询似乎花费了太长时间。我从未见过它工作,因此我不知道这是正确的方法。
有什么可以让它表现得更好或有什么不同的方法来获得它吗?
例如,如果我强制连接错误,它将返回一个空数组b
。但是查询这个数组的大小总是很慢,即使我查询{$size: 1}
99,9% 的结果也是如此。我想知道我是否可以做这样的事情来在加入期间只选择缺失的值:
{$lookup.pipeline: [{$myself: null}] }
请问有什么想法吗?
谢谢