MongoDB聚合速度慢与索引匹配?

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',

我有一个集合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',
                    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 }
        ]
    )