2016-10-27 9 views
0

データベース内の特定のハッシュ値に一致する文書の数を取得しようとしていますが、文書の数にかかわらずcount()関数は0を返すようですコレクションにこれは私が持っているコードです:MongoDB `cursor.count`は空でないコレクションにもかかわらず0を返します

var cursor = collection.find({hash_val: current_hash_val}, {response: 1,_id: 0}); 


cursor.count(function(count) { 
    if(count == 1) { 
     console.log("Found a unique document. Count is %d",count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 
    } 
    else if(count > 1){ 
     console.log("Found multiple documents. Count is %d", count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 

    } 
    else{ 
     console.log("Did not find any documents. Count is %d", count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 

    } 
}); 

私はcurrent_hash_valに一致するコレクション内のいくつかのドキュメントを持っていますが、私のコードは常にelseステートメントにジャンプします。しかし、forEach関数は、コンソールに印刷されたいくつかのレコードを表示します。誰かがカウント関数を間違って使用しているのか、これがMongoDBの部分の動作が間違っているのかを誰かが説明できますか?

答えて

2

コールバック関数は二つの引数、エラーカウント値を取るので、それはおそらくnullcountにあるエラー値を割り当てていますので、コールバック関数にカウント値の前にエラーを取得しようとするので、それはだようだ:

var cursor = collection.find({hash_val: current_hash_val}, {response: 1,_id: 0}); 


cursor.count(function(err, count) { 
    if(count == 1) { 
     console.log("Found a unique document. Count is %d",count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 
    } 
    else if(count > 1){ 
     console.log("Found multiple documents. Count is %d", count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 

    } 
    else{ 
     console.log("Did not find any documents. Count is %d", count); 
     cursor.forEach(function(doc) { 
      console.log(doc); 
     }); 

    } 
}); 

あなたはそれを行っているようです詳細

+0

ためcount exampleを確認することができます。このようなコールバックの最初のパラメータとして常に 'err'を受け入れるのが慣例ですか? – rafafan2010

+1

はい、詳細については、このリンクをチェックしてください:http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/(私はそれから学んだ) – andresk

+0

君は! – rafafan2010