MongoDB count() 与 countDocuments()

SKe*_*ney 21 mongoose mongodb

我正在使用 MongoDB,更具体地说是 Mongoose。我最近摆脱了更新 mongo 和 mongoose 时出现的一些弃用警告。

我的一些查询可能如下所示:

const count = await Badge.find(query).count().exec()
Run Code Online (Sandbox Code Playgroud)

我已经将其更改为

const count = Badge.find(query).countDocuments().exec()
Run Code Online (Sandbox Code Playgroud)

和中提琴,贬低警告消失了。然而,阅读MongoDB的文档似乎应该这样写:

const count = Badge.countDocuments(query)
Run Code Online (Sandbox Code Playgroud)

以上所有内容都返回完全相同的内容。显然后两个是我想要的,因为count().

后两者有什么区别?我应该更喜欢其中一个吗?

pra*_*ad_ 16

db.collection.find方法返回一个游标。游标上的cursor.count ()方法计算游标引用的文档数。这与db.collection.count().

\n

从 MongoDB v4.0 开始,这两种方法(cursor.count()和)均已弃用。db.collection.count()文档中:

\n
\n

与 4.0 功能兼容的 MongoDB 驱动程序弃用了各自的游标和集合 count() API,转而使用 countDocuments() 和estimatedDocumentCount() 的新 API。有关给定驱动程序的特定 API\n名称,请参阅驱动程序文档。

\n
\n
\n

避免使用不带查询谓词的 db.collection.count() 方法,\n因为不带查询谓词,该方法将根据集合\xe2\x80\x99s 元数据返回结果,这可能会产生近似计数。

\n
\n

db.collection.countDocuments(query)返回与集合或视图的查询匹配的文档计数。这是您需要用来计算集合中文档数量的方法。

\n
\n

以上所有内容都返回完全相同的内容。

\n
\n

是的,大多数时候。仅返回countDocuments文档的实际计数。其他方法根据集合的元数据返回计数。

\n

如果您想使用db.collection.count,请将其与查询谓词一起使用,这将返回文档的准确计数(但是,请注意,此方法已被弃用)。

\n


Wer*_*eit 7

db.collection.count()不计算实际的文档数量,它根据 collection\xe2\x80\x99s 元数据返回结果,这可能会产生近似计数。

\n

请参阅db.collection.count()

\n

为了正确区分MonogDB的介绍countDocuments()estimatedDocumentCount()方法。

\n