我正在使用Nodejs / Express / Mongoose应用程序,我希望通过增加记录文档的数量来实现自动增量ID功能,但是我无法获得此计数,导致Mongoose '计算'方法不返回数字:
var number = Model.count({}, function(count){ return count;});
有人设法得到了计数吗?请帮助。
答案 0 :(得分:27)
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 );
});
更新:
根据@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
});
});
});
答案 1 :(得分:6)
如果您使用的是node.js> = 8.0且Mongoose> = 4.0,则应使用await
。
const number = await Model.count();
console.log(number);
答案 2 :(得分:1)
你必须等待回调函数
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')
答案 3 :(得分:1)
如果有人在2019年签到,则count
已过时。而是使用countDocuments
。
示例:
const count = await Model.countDocuments({
filterVar: parameter
});
console.log(count);
答案 4 :(得分:1)
如果您的收藏很大-请使用Model.estimatedDocumentCount()
。比count
和countDocuments
更快,因为它不会扫描整个集合。
请参见https://mongoosejs.com/docs/api/model.html#model_Model.estimatedDocumentCount
答案 5 :(得分:0)
看起来您希望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