127

データが保存されたモデルの数を知るにはどうすればよいですか? の方法がありますが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か?

ありがとう

4

9 に答える 9

164

コードが機能しない理由は、count 関数が非同期であり、同期的に値を返さないためです。

使用例を次に示します。

userModel.count({}, function( err, count){
    console.log( "Number of users:", count );
})
于 2013-03-26T12:14:45.783 に答える
151

以下のコードは機能します。countDocumentsの使用に注意してください。

 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.countDocuments({name: 'anand'}, function(err, c) {
           console.log('Count is ' + c);
      });
   }
 }); 
于 2012-05-30T10:22:18.360 に答える
4

ここで最も投票数の多い回答はまったく問題ありません。要求された機能を実現できるように、awaitの使用を追加したいだけです。

const documentCount = await userModel.count({});
console.log( "Number of users:", documentCount );

今後廃止されるため、「count()」よりもcountDocuments()を使用することをお勧めします。したがって、今のところ、完璧なコードは次のようになります。

const documentCount = await userModel.countDocuments({});
console.log( "Number of users:", documentCount );
于 2020-01-02T05:34:22.600 に答える
-1

前に述べたように、コードはそのままでは機能しません。それに対する解決策はコールバック関数を使用することですが、「コールバック地獄」に陥ると思われる場合は、「Promisses」を検索できます。

コールバック関数を使用した可能な解決策:

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


} 
于 2014-07-17T16:07:41.227 に答える