Как получить номер документа Mongoose?

Я работаю над приложением Nodejs/Express/Mongoose, и я хотел реализовать функции идентификатора автоинкремента, увеличивая количество записанных документов, но я не могу получить этот счет, вызывать метод подсчета Mongoose не возвращает число:

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

Кому удалось получить счет? Помогите пожалуйста.

Ответы

Ответ 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 );
});

UPDATE:

Как было предложено @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 

        });
    });
});

Ответ 2

Если вы используете node.js> = 8.0 и Mongoose> = 4.0, вам следует использовать await.

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

Ответ 3

вы hava для ожидания функции обратного вызова

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')

Ответ 4

Похоже, вы ожидаете, что var number будет содержать значение count. В вашей функции обратного вызова вы возвращаете 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

Ответ 5

Если кто-нибудь зарегистрирует это в 2019 году, count считается устаревшим. Вместо этого используйте countDocuments.

Пример:

let count = await Model.countDocuments({ projection: parameter }); console.log(count);