MongoDB检查存在计数与findOne性能

Haf*_*fez 4 mongodb database-performance

我试图找出我的数据库中是否存在文档,并且我很好奇,这样做的最佳方法是什么?使用

User.findOne(query).select('_id')

要么

User.count(query)

一方面,findOne返回一个24进制的字符串,而count仅返回一个整数;另一方面,.count它将遍历整个集合,而.findOne将在第一个匹配的文档处停止。

我找到的与问题相关的唯一答案是这个问题,找不到其他答案,这个答案得到了支持.count,Mongo在性能方面做了很多工作,这个问题是6年前的。

什么更有价值?内存(findOne)或处理能力(计数)?

not*_*est 5

在某些情况下,count您可能会得到不正确的结果。而且,性能会比慢findOne()

在分片群集上,如果存在孤立文档或正在进行块迁移,则db.collection.count()可能导致计数不准确。

在使用Wired Tiger存储引擎不正常关闭mongod之后,count()报告的计数统计信息可能不准确。

当您真正要检查文档的存在时,我认为findOne()是更好的选择。

  • 只想参考这篇文章:https://blog.serverdensity.com/checking-if-a-document-exists-mongodb-slow-findone-vs-find/这是相反的说法,尽管他们不使用count ()。 (2认同)