如何使用 Mongoose 获取文档数量?

Posted

技术标签:

【中文标题】如何使用 Mongoose 获取文档数量?【英文标题】:How to get number of documents using Mongoose? 【发布时间】:2015-06-14 11:29:52 【问题描述】:

我正在开发 Nodejs/Express/Mongoose 应用程序,我想通过增加记录文档的数量来实现自动增量 ID 功能,但我无法获得此计数,原因是 Mongoose 'count' 方法不返回数字:

var number = Model.count(, function(count) return count;);

有人设法得到计数吗?请帮忙。

【问题讨论】:

复制,查看更多讨论:***.com/questions/10811887 【参考方案1】:

count 函数是异步的,它不会同步返回值。用法示例:

Model.count(, function(err, count)
    console.log( "Number of docs: ", count );
);

您也可以尝试在find() 之后链接它:

Model.find().count(function(err, count)
    console.log("Number of docs: ", count );
);

更新(节点:25093 - 弃用警告):

不推荐使用 count,您也可以完全按照使用“count”的方式使用“Collection.countDocuments”或“Collection.estimatedDocumentCount”。

更新:

正如@Creynders 所建议的,如果您尝试实现自动增量值,那么值得查看 mongoose-auto-increment 插件:

示例用法:

var Book = connection.model('Book', bookSchema);
Book.nextCount(function(err, count) 
 
    // count === 0 -> true 
 
    var book = new Book();
    book.save(function(err) 
 
        // book._id === 0 -> true 
 
        book.nextCount(function(err, count) 
 
            // count === 1 -> true 
 
        );
    );
);

【讨论】:

它是这样工作的,但我想在一个变量中取回计数,以便我可以增加该变量: @kaizer 了解 count 函数是异步的,并且可以随时完成,因此变量 number 在您访问它时将是未定义的。您只能使用 count 函数回调中的值。 @kaizer 看来您正在尝试实现自动增量值?您可以为此使用mongoose-auto-increment 插件。 @Creynders 你明白了,谢谢,我会试试并告诉你【参考方案2】:

如果有人在 2019 年签出,count 将被弃用。请改用countDocuments

例子:

const count = await Model.countDocuments( filterVar: parameter ); console.log(count);

【讨论】:

【参考方案3】:

如果您的收藏量很大,请使用Model.estimatedDocumentCount()。它比countcountDocuments 更快,因为它不会扫描整个集合。

见https://mongoosejs.com/docs/api/model.html#model_Model.estimatedDocumentCount

【讨论】:

【参考方案4】:

如果您使用的是 node.js >= 8.0 和 Mongoose >= 4.0,您应该使用 await

const number = await Model.countDocuments();
console.log(number);

【讨论】:

【参考方案5】:

你必须等待回调函数

Model.count(, function(err , count)
  var number = count;
  console.log(number);
);

javascript

setTimeout(function() 
  console.log('a');
, 0);

console.log("b");

“b”将在“a”之前打印 因为

console.log('a')

【讨论】:

【参考方案6】:

您似乎希望 var number 包含计数值。在您的回调函数中,您将返回 count,但这是异步执行的,因此不会将值分配给任何内容。

另外,回调函数中的第一个参数应该是err

例如:

var number = Model.count(, function(err, count) 
    console.log(count); // this will print the count to console
);

console.log(number); // This will NOT print the count to console

【讨论】:

以上是关于如何使用 Mongoose 获取文档数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 获取最近添加的文档?

如何使用 Mongoose 进行查询,获得 N 个结果,但结合它找到的任何满足特定条件的文档?

如何在 Mongoose 中编写一个获取所有文档的静态方法?

如何在 MongoDB 中获取集合的计数?

Mongoose/MongoDB:获取倒数第二个文档

如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?