MongoDB是否将索引用于;加入;收藏?
我有两个系列:a和b。b有字段x。 集合b中有字段x的索引 当我尝试时:MongoDB是否将索引用于;加入;收藏?,mongodb,Mongodb,我有两个系列:a和b。b有字段x。 集合b中有字段x的索引 当我尝试时: db.a.aggregate([ $lookup:{ from:"b", localField:"parent.id", foreignField:"_id", as:"joined" } },
db.a.aggregate([
$lookup:{
from:"b",
localField:"parent.id",
foreignField:"_id",
as:"joined"
}
},
{
'$match':{
'joined.x':{'$gt':2}
}
}
])
它不使用索引。怎么了
更新
它甚至不以以下方式编制索引:
db.a.aggregate([{$lookup: {
from: "b",
let: { parentId: "$parent.id"},
pipeline: [
{ $match:
{ $expr:
{ $eq: [ "$x", 2 ] },
{ $eq: [ "$_id", $$parentId ] },
}
}
],
as: "joined"
}}
])
mongodb
或您在此处的查询没有问题
唯一可以在聚合管道中使用索引的阶段是第一阶段,它必须是$match
或$geoNear
或`$sort
从MongoDB 3.2版开始,它可以覆盖整个管道,但只能$match
或$geoNear
或$sort
,但由于,$lookup创建了全新的文档,因此MongoDB管道无法在下一个$match
阶段使用索引
有关详细信息,请阅读。
$match
仅当索引用作聚合管道中的第一个阶段时,才可以利用它。$lookup
正在创建一个新文档,然后在该文档上进行匹配。它与contents
或b
中的文档都没有任何相似之处。在版本3.2中进行了更改:从MongoDB 3.2开始,索引可以覆盖聚合管道。我已经更新了我的问题,您能看一下吗?