Как получить все количество модели мангуста?

как я могу узнать количество модели, данные которой были сохранены? существует метод Model.count(), но это, похоже, не работает.

var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);        
var userCount = userModel.count('name');

userCount является объектом, который называется методом, может получить real count?

спасибо

5 ответов


код ниже работает. Обратите внимание на использование графа.

 var mongoose = require('mongoose');
 var db = mongoose.connect('mongodb://localhost/myApp');
 var userSchema = new mongoose.Schema({name:String,password:String});
 var userModel =db.model('userlists',userSchema);
 var anand = new userModel({ name: 'anand', password: 'abcd'});
 anand.save(function (err, docs) {
   if (err) {
       console.log('Error');
   } else {
       userModel.count({name: 'anand'}, function(err, c) {
           console.log('Count is ' + c);
      });
   }
 }); 

причина, по которой ваш код не работает, заключается в том, что функция count является асинхронной, она не синхронно возвращает значение.

пример использования:

userModel.count({}, function( err, count){
    console.log( "Number of users:", count );
})

вы должны дать объект в качестве аргумента

userModel.count({name: "sam"});

или

userModel.count({name: "sam"}).exec(); //if you are using promise

или

userModel.count({}); // if you want to get all counts irrespective of the fields

коллекция.граф является устаревшим и будет удален в будущих версиях. Используйте коллекцию.countDocuments или коллекции.estimatedDocumentCount.

userModel.countDocuments(query).exec((err, count) => {
    if (err) {
        res.send(err);
        return;
    }

    res.json({ count: count });
});

как уже было сказано, ваш код не будет работать так, как он есть. Решением этого было бы использование функции обратного вызова, но если вы думаете, что это приведет вас к "аду обратного вызова", вы можете искать "обещания".

возможное решение с использованием функции обратного вызова:

//DECLARE  numberofDocs OUT OF FUNCTIONS
     var  numberofDocs;
     userModel.count({}, setNumberofDocuments); //this search all DOcuments in a Collection

если вы хотите найти количество документов на основе запроса, вы можете сделать это:

 userModel.count({yourQueryGoesHere}, setNumberofDocuments);

setNumberofDocuments является отдельной функцией:

var setNumberofDocuments = function(err, count){ 
        if(err) return handleError(err);

        numberofDocs = count;

      };

теперь вы можете получить количество документов в любом месте с getFunction:

     function getNumberofDocs(){
           return numberofDocs;
        }
 var number = getNumberofDocs();

кроме того, вы используете эту асинхронную функцию внутри синхронной, используя обратный вызов, например:

function calculateNumberOfDoc(someParameter, setNumberofDocuments){

       userModel.count({}, setNumberofDocuments); //this search all DOcuments in a Collection

       setNumberofDocuments(true);


} 

надеюсь, что это может помочь другим. :)