Как получить номер документа 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);