Mongo聚合优化器

时间:2020-04-03 21:01:25

标签: mongodb optimization aggregation-framework

我应该让Mongo Optimizer为我完成工作,还是值得根据说明中显示的阶段进行更改?

我有一个与Mongo Optimizer Page中列出的场景相同的场景,在该场景中,我有一个addFields阶段,接着是一个比赛,比赛中只有一个字段需要在addFields阶段之后。

优化器使用不需要'addFields'阶段的字段创建1个新的match阶段,并将其放在第一位。

现在我知道是进行更改的速度更快还是更好?或者,如果我不进行更改,它的执行速度基本上会一样快吗?

为清楚起见,请将我的示例放在下面:

db.collection.aggregate([
    {
        $addFields: {
            effectiveDate: {
                $dateFromString: {
                    dateString: '$effectiveStartOn'
                }
            }
        }
    },
    {
        $match: {
            $and : [
                { effectiveDate: { $lte: ISODate("2020-03-01")} },
                { first: "Baby" },
                { last: "Yoda" }
            ]
        }
    }
])

成为:

db.collection.aggregate([
    {
        $match: {
            $and : [
                { first: "Baby" },
                { last: "Yoda" }
            ]
        }
    },
    {
        $addFields: {
            effectiveDate: {
                $dateFromString: {
                    dateString: '$effectiveStartOn'
                }
            }
        }
    },
    {
        $match: {
            effectiveDate: { $lte: ISODate("2020-03-01")}
        }
    }
])

0 个答案:

没有答案