MongoDB聚合速度慢与索引匹配?
我有一个集合a和一些字段a,b,c,d 如果我这样做:MongoDB聚合速度慢与索引匹配?,mongodb,aggregation-framework,aggregate,Mongodb,Aggregation Framework,Aggregate,我有一个集合a和一些字段a,b,c,d 如果我这样做: db.A.aggregate([{$match:{A:true,b:false,c:false},{$limit:50}])>这很快(0.1s) 现在如果我这样做了 db.A.aggregate( [ { $lookup: { from: 'B', localField: 'b',
db.A.aggregate([{$match:{A:true,b:false,c:false},{$limit:50}])
>这很快(0.1s)
现在如果我这样做了
db.A.aggregate(
[
{
$lookup: {
from: 'B',
localField: 'b',
foreignField: '_id',
as: 'b'
}
},
{$match: {'b.d': true}},
{ $limit: 50 }
]
)
这大约需要1.5秒(很多文档,我同意1.5秒)
现在,如果我像以前一样,只是添加$match(应该使用索引…):
这需要10秒?我很困惑为什么
PS:我对所有这些字段都有索引。不过,我发现了问题。除了一个字段外,我对所有字段都有索引,这降低了我的请求速度 我通过使用
{explain:true}
选项找到了它,我发现它使用的是一个不包含任何字段的复合索引
现在,我对我的1.5s查询很在行在您的案例中,这是最后一个(
$match,$lookup,$match
)您使用了$match stage两次。在其他案例中,您加入不同的集合,然后显示匹配的文档。
正如您所说,您已经为列编制了索引,您能否告诉我列的值是否包含文本、数字等。如果您共享示例数据,我将共享比您的查询性能更好的查询。我建议您在mongoDB官方网页上提问。链接:是的,但我需要两个匹配项,因为第二个匹配项ch是关于一个查找字段的。你能分享数据样本吗?这样我就可以对此进行查询了。
db.A.aggregate(
[
{$match: {a: true, b: false, c: false}},
{
$lookup: {
from: 'B',
localField: 'b',
foreignField: '_id',
as: 'b'
}
},
{$match: {'b.d': true}},
{ $limit: 50 }
]
)