我应该让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")}
}
}
])