如何使用 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()
。它比count
和countDocuments
更快,因为它不会扫描整个集合。
见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 进行查询,获得 N 个结果,但结合它找到的任何满足特定条件的文档?