如何在mongo中进行索引后findOneAndUpdate()的性能评估

Posted

技术标签:

【中文标题】如何在mongo中进行索引后findOneAndUpdate()的性能评估【英文标题】:How to do the performance evaluation of findOneAndUpdate() after indexing in mongo 【发布时间】:2020-01-24 04:24:14 【问题描述】:

我可以看到 .explain("executionStats") 来评估 Mongo 中 find() 查询的性能。但是 .explain 不适用于 findOneAndUpdate()。有没有办法查看索引对 findOneAndUpdate() 查询有多大帮助

【问题讨论】:

Explain 返回本文档中描述的方法的查询计划:db.collection.explain()。 【参考方案1】:

在解释(“执行统计”)中。您只需删除“executionStas”并运行您的 findOneAndUpdate 查询,如下所示

''' db.collection.explain().findOneAndUpdate(query) '''

它会正常工作...

【讨论】:

它对我不起作用。这就是我问这个问题的原因。它给出了一个错误 E QUERY [js] TypeError: db.mycollection.explain(...).findOneAndUpdate is not a function :但是“更新”同样的事情正在工作 我认为 1 次 2 功能不起作用,您必须尝试 stat() 方法。我认为它正在工作。【参考方案2】:

很遗憾,您不能同时使用 .explain().findOneAndUpdate().explain() 可以与返回游标 id 的函数一起使用,例如 .find(),但它不能与 .findOne().findOneAndUpdate() 和类似函数一起使用,因为它们返回一个不是游标 id 的结果。

我的建议是看看 Rockset 的 Justin Liu 的这两篇博客文章。

Handling Slow Queries in MongoDB - Part 1 - Investigation

Handling Slow Queries in MongoDB - Part 2 - Solutions

【讨论】:

以上是关于如何在mongo中进行索引后findOneAndUpdate()的性能评估的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mongo 中运行地理空间查询?

mongo ttl索引

mongo索引

mongo分片丢失分片索引

Mongo 后台加索引踩坑

Mongo 后台加索引踩坑