2012-05-30 39 views
63

如何知道数据已保存的模型的计数?有一种方法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

谢谢

+0

能告诉你一些代码。 – almypal

+0

如果您使用的是ES 2016,则可以将呼叫包装在一个承诺内进行计数,并使用生成器进行调用。 – mikeyGlitz

回答

82

下面的代码工作。请注意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); 
     }); 
    } 
}); 
110

您的代码不工作的原因是因为计数功能是异步,它不同步返回一个值。

下面是使用的例子:

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

举个例子来计算方法的同步方式 –

1

正如之前所说,你的代码将无法正常工作事情是这样的。对此的解决方案将使用回调函数,但如果您认为它会将您带到“回调地狱”中,则可以搜索“Promisses”。

使用一个回调函数的一个可能的解决方案:

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

,如果你要搜索的基于查询的文档数,你可以这样做:

userModel.count({yourQueryGoesHere}, setNumberofDocuments); 

setNumberofDocuments是separeted功能:

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

     numberofDocs = count; 

     }; 

现在,您可以通过get功能:

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

此外,通过使用一个回调,例如使用异步函数一个同步内:

function calculateNumberOfDoc(someParameter, setNumberofDocuments){ 

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

     setNumberofDocuments(true); 


} 

希望它可以帮助别人。 :)

+0

在函数calculateNumberOfDoc()中,为什么要调用setNumberofDocuments(true)? 即使在返回实际计数之前,它是否会首先导致错误? – pravin

7

你应该给一个对象作为参数

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