我如何解释()在MongoDB中的upsert来查看是否使用索引?

当代码改变时,快速告诉我索引是否适合find()语句是( nodejs

  collection.find(query).explain(function(err, explaination) { console.log('MongoDebug: ' + explaination.cursor); }); 

如果游标是BtreeCursortypes,则使用索引。

如何在使用insert()upsert: true时检查这个问题upsert: true

explain()是游标上的函数,在插入时不可用。 还有一个$explain查询修饰符,但它仍然是一个查询修饰符。

然而,作为explain 2.0有一个大的工作负载,其中一个子任务是提供explain()更新 – SERVER-14101 。 这在2.7.7版本中被列为固定的。

需要注意的是,为每个操作执行解释可能不是一个好主意,因为它迫使MongoDB始终重新评估查询计划,从而增加了数据库上的服务器负载。

您现在可以使用集成的profiler和db.currentOp()来分析非查询操作的性能,但洞察力是有限的。 尝试一个简单的find().explain()进行手动优化,使用的索引应该是相同的。