如何得到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
?
谢谢
下面的代码工作。 注意使用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); }
希望它能帮助别人。 🙂