我正在执行以下两项操作,您能告诉我哪个操作性能更高,为什么?考虑在_id
字段上有一个索引,并且isdelete
已经是真的
SomeModel.updateOne({ _id, isDelete: false },{ isDelete: true });
&
SomeModel.updateOne({ _id},{ isDelete: true });
答案 0 :(得分:1)
在第一个查询的filter子句中,您隐式指定一个AND条件。因此,优化程序必须同时扫描“ _id”和“ isDelete”字段
在第二个查询中,优化器将仅扫描'_id'索引并执行更新操作。如果您的用例不需要同时验证两个字段,那么第二个查询将是不错的选择