Je travaille sur une application Nodejs/Express/Mongoose et je souhaitais implémenter une fonctionnalité d'auto-incrémentation en incrémentant le nombre de documents enregistrés, mais je ne parviens pas à obtenir ce nombre, car la méthode Mongoose 'count' ne renvoyer le numéro:
var number = Model.count({}, function(count){ return count;});
Est-ce que quelqu'un a réussi à obtenir le compte? Aidez-moi, s'il vous plaît.
La fonction count est asynchrone, elle ne renvoie pas de manière synchrone une valeur. Exemple d'utilisation:
Model.count({}, function(err, count){
console.log( "Number of docs: ", count );
});
Vous pouvez également essayer de l'enchaîner après une find()
:
Model.find().count(function(err, count){
console.log("Number of docs: ", count );
});
METTRE À JOUR:
Comme suggéré par @Creynders, si vous essayez d'implémenter une valeur incrémentielle automatique, il serait intéressant d'examiner le plugin mongoose-auto-increment:
Exemple d'utilisation:
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
});
});
});
Si vous utilisez node.js> = 8.0 et Mongoose> = 4.0, vous devez utiliser await
.
const number = await Model.count();
console.log(number);
vous devez attendre la fonction de rappel
Model.count({}, function(err , count){
var number = count;
console.log(number);
});
en JavaScript
setTimeout(function() {
console.log('a');
}, 0);
console.log("b");
le "b" sera imprimé avant "a" parce que
console.log('a')
Il semble que vous vous attendiez à ce que var number
contienne la valeur count. Dans votre fonction de rappel, vous renvoyez count
, mais ceci est exécuté de manière asynchrone afin que la valeur ne soit pas affectée.
En outre, votre premier paramètre dans votre fonction de rappel devrait être err
.
Par exemple:
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