Aggregate1:
db.collection.aggregate([
{
$limit: 1
},
{
$lookup: {
...
}
}
])
Aggregate2:
db.collection.aggregate([
{
$lookup: {
from: 'collection2',
localField: 'field',
foreignField: 'field',
as: 'newField',
// do some query when lookup
query: {'newField.xxx': 1}
}
}
])
Aggregate1和Aggregate2有什么不同?
在Aggregate1中,首先扫描整个集合,然后执行$ lookup吗?
如果不同,如何查询某些查询?就像这样:
db.collection.aggregate([
{
$lookup: {
from: 'collection2',
localField: 'field',
foreignField: 'field',
as: 'newField'
}
},
{$unwind: '$newField'},
{$match: {'newField.xxx': 1}}
])
我知道,我可以这样做:
{ lastName: { $ne: "$lastName" } }
但我担心,就像上面的例子一样,整个集合都会被扫描。
期待您的回复!
现在,我发现这个api:$graphLookup.restrictSearchWithMatch,但是:
请注意
您不能在此过滤器中使用任何聚合表达式。
例如,查询文档,例如
internal
将无法在此上下文中查找lastName所在的文档 value与输入文档的lastName值不同, 因为“$ lastName”将充当字符串文字,而不是字段路径。