如何在MongoDB集合中计算文档数量

34

我想知道如何计算集合中文档的数量。我尝试了以下方法

var value = collection.count();
&&
var value = collection.find().count()
&&
var value = collection.find().dataSize()

我总是得到方法未定义的错误。

您能告诉我在集合中查找文档总数要使用的方法吗?


第二个应该可以运行... 当这是mongo shell时,你可能需要在你的集合前加上 db. 像这样:db.collection.find().count() - Philipp
它不喜欢count()。我得到了下面的错误- Ganesh TypeError: undefined is not a function at C:\software\Enide-Studio\workspace\nodeexpress-mongo\node_modules\mongodb\lib\mongodb\collection\commands.js:55:5 at C:\software\Enide-Studio\workspace\nodeexpress-mongo\node_modules\mongodb\lib\mongodb\db.js:1183:7 - Tinniam V. Ganesh
我认为这种方式更适合特定的集合:https://stackoverflow.com/a/69168420/7399485 - Saulo M
8个回答

33

1
无论您要查找哪个集合的计数,请直接在Mongo shell中调用db.salary.count(),它将返回计数。 - Ritesh Srivastava

24

如果您想获取集合中文档的数量,则可以使用count方法,它返回一个Promise对象。以下是一个示例:

let coll = db.collection('collection_name');
coll.count().then((count) => {
    console.log(count);
});

这假设您正在使用Mongo 3。

编辑:在4.0.3版本中,count已弃用。 使用countDocuments 来实现目标。


13

自从v4.0.3版本以来,您可以使用以下方法来提高性能:

db.collection.countDocuments()

2
请注意,这仍然不是一个高效的操作。CountDocuments执行完整的集合扫描,并且在大型集合上是一次昂贵的查询,可能会导致巨大的I/O峰值。 - Nico Van Belle

5

通过单行执行Mongo shell命令可以获得更好的结果。

获取mongodb中所有文档数量的方法:

var documentCount = 0; db.getCollectionNames().forEach(function(collection) { documentCount++; }); print("可用的文档数: "+ documentCount);

输出结果: 可用的文档数:9

获取一个集合中所有文档的数量:

db.getCollectionNames().forEach(function(collection) { resultCount = db[collection].count(); print(collection + " 中的文档数量为: "+ resultCount); });

输出结果:

Results count for ADDRESS: 250 
Results count for APPLICATION_DEVELOPER: 950
Results count for COUNTRY: 10
Results count for DATABASE_DEVELOPER: 1
Results count for EMPLOYEE: 4500
Results count for FULL_STACK_DEVELOPER: 2000
Results count for PHONE_NUMBER: 110
Results count for STATE: 0
Results count for QA_DEVELOPER: 100

获取集合中所有文档的数据大小

db.getCollectionNames().forEach(function(collection) { size = db[collection].dataSize(); print("集合 " + collection + " 的数据大小为:" + size); });

输出结果:

dataSize for ADDRESS: 250 
dataSize for APPLICATION_DEVELOPER: 950
dataSize for COUNTRY: 10
dataSize for DATABASE_DEVELOPER: 1
dataSize for EMPLOYEE: 4500
dataSize for FULL_STACK_DEVELOPER: 2000
dataSize for PHONE_NUMBER: 110
dataSize for STATE: 0
dataSize for QA_DEVELOPER: 100

3

简单地说,您可以使用

      Model.count({email: 'xyz@gmail.com'}, function (err, count) {
      console.log(count);
    });

2

db.collection('collection-name').count()现在已经过时。 现在应该使用countDocuments()estimatedDocumentCount()代替count()。 以下是一个例子:

`db.collection('collection-name').countDocuments().then((docs) =>{
console.log('Number of documents are', docs);
    };`

了解更多请阅读文档:

https://docs.mongodb.com/manual/reference/method/db.collection.countDocuments/ (计算集合中的文档数量)

https://docs.mongodb.com/manual/reference/method/db.collection.estimatedDocumentCount/ (估计集合中的文档数量)


1
通过MongoDB控制台,您可以查看集合中文档的数量。
1.进入MongoDB控制台并发出命令"use databasename"。 要启动控制台,请转到安装MongoDB的bin文件夹并单击mongo.exe以启动MongoDB控制台。 例如,如果数据库是myDB,则命令为"use myDB"。
2.执行此命令db.collection.count() 集合类似于RDBMS中的表。 例如,如果您的集合名称是myCollection,则命令为db.myCollection.count();
此命令将在控制台中打印集合的大小。

0
db.collection.count(function(err,countData){

//you will get the count of number of documents in mongodb collection in the variable 
countdata

});

在代码中,将“collection”替换为您的mongodb集合名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接