如何得到mongoose模型的所有计数?

我怎样才能知道数据已保存的模型的数量? 有一个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是一个对象,哪个方法可以得到一个真正的count

谢谢

       

网上收集的解决方案 "如何得到mongoose模型的所有计数?"

下面的代码工作。 注意使用count。

  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); }); } }); 

你的代码不工作的原因是因为计数函数是asynchronous的 ,它不会同步返回一个值。

以下是一个使用示例:

 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 

如前所述,你的代码不会按照这种方式工作。 一个解决scheme将使用callback函数,但如果你认为它会带你到一个“callback地狱”,你可以search“Promisses”。

使用callback函数的可能解决scheme:

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

如果你想search基于查询的文档数量,你可以这样做:

  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(); 

另外,通过使用callback,你可以在同步函数中使用这个asynchronous函数,例如:

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

希望它能帮助别人。 🙂