如何获取Mongoose文件的数量?

时间:2015-04-09 07:47:16

标签: node.js mongodb mongoose

我正在使用Nodejs / Express / Mongoose应用程序,我希望通过增加记录文档的数量来实现自动增量ID功能,但是我无法获得此计数,导致Mongoose '计算'方法不返回数字:

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

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

6 个答案:

答案 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()。比countcountDocuments更快,因为它不会扫描整个集合。

请参见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