2012-05-30 73 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