Mongodb 关于聚合运行机制的几个问题
聚合1:Mongodb 关于聚合运行机制的几个问题,mongodb,Mongodb,聚合1: db.collection.aggregate([ { $lookup: { ... } }, { $limit: 1 } ]) 聚合2: db.collection.aggregate([ { $limit: 1 }, { $lookup: { ... } } ]) Aggregate1和Aggregate2不同吗 在Aggregate1中,是否先扫描整个集合,然后执行$loo
db.collection.aggregate([
{
$lookup: {
...
}
},
{
$limit: 1
}
])
聚合2:
db.collection.aggregate([
{
$limit: 1
},
{
$lookup: {
...
}
}
])
Aggregate1和Aggregate2不同吗
在Aggregate1中,是否先扫描整个集合,然后执行$lookup
如果不同,如何使用一些查询进行查找?如下所示:
db.collection.aggregate([
{
$lookup: {
from: 'collection2',
localField: 'field',
foreignField: 'field',
as: 'newField',
// do some query when lookup
query: {'newField.xxx': 1}
}
}
])
我知道,我能做到:
db.collection.aggregate([
{
$lookup: {
from: 'collection2',
localField: 'field',
foreignField: 'field',
as: 'newField'
}
},
{$unwind: '$newField'},
{$match: {'newField.xxx': 1}}
])
但我担心,像上面的例子一样,整个收藏都会被扫描
期待您的回复
现在,我发现这个api:,但是:
注
不能在此筛选器中使用任何聚合表达式
例如,查询文档,如
{ lastName: { $ne: "$lastName" } }
无法在此上下文中查找lastName所在的文档
值与输入文档的lastName值不同,
因为“$lastName”将充当字符串文字,而不是字段路径
在查找阶段不能包含文档。查找执行左连接,因此您可以选择限制进入查找阶段的内容。就像你在聚合中过滤文档一样。图形查找进行递归查找,因此选择该选项的原因是。您在最后一个示例中介绍了“展开”和“匹配”,该示例已优化,可用于查找。所以可能没那么糟糕。看看这个@SagarReddy,我还不确定它是否会合并。我希望这能证实@好的,非常感谢!我将尝试使用聚合解释,并告诉您结果您无法在查找阶段包含文档。查找执行左连接,因此您可以选择限制进入查找阶段的内容。就像你在聚合中过滤文档一样。图形查找进行递归查找,因此选择该选项的原因是。您在最后一个示例中介绍了“展开”和“匹配”,该示例已优化,可用于查找。所以可能没那么糟糕。看看这个@SagarReddy,我还不确定它是否会合并。我希望这能证实@好的,非常感谢!我将尝试使用聚合解释并告诉您结果