2012-04-06 7 views
0

私は説明できないような奇妙な問題があります。次のように与えられます。node-mongodb findOneの動作

Generics.prototype.getCollection= function(collection,callback) { 
    this.db.collection(collection, function(error, document_collection) { 
    if(error) callback(error); 
    else callback(null, document_collection); 
    }); 
}; 

Generics.prototype.findById = function(collection, id, callback) { 
    this.getCollection(collection,function(error, document_collection) { 
     if(error) callback(error) 
     else { 
     document_collection.findOne({_id: document_collection.db.bson_serializer.ObjectID.createFromHexString(id)}, function(error, result) { 
      if(error) callback(error) 
      else callback(null, result) 
     }); 
     } 
    }); 
}; 

Generics.prototype.findOne = function(collection, _key, _value, callback) { 
    this.getCollection(collection,function(error, document_collection) { 
     if(error) callback(error) 
     else { 
     document_collection.findOne({_key:_value}, function(error, result) { 
      if(error) callback(error) 
      else callback(null, result) 
     }); 
     } 
    }); 
}; 

findByIdは魅力的です。ただし、findOneは実行時に常にnullを返します。私はノード・デバッガを起動して、何があったのか調べ、渡された変数の1つが何らかの形で破壊/消去されていることを発見しました。 _keyはいつも消えているようだ。しかし_valueは常にそこにあります。私は_keyを何か他のものに改名しようとしましたが、それはいつも消えています。起こっている可能性のあるアイデアは感謝します。ありがとう!

更新 私はより柔軟な検索クエリを可能にするためにビットをリファクタリングし、それが一つの変数で働かせました。私はまだ何が起こっているのか知りたいです。私はそれが私がかなり理解していないいくつかの閉鎖事業のように感じる。

​​

答えて

1
あなたはfindOneメソッドに渡されたときに行ったように、あなたが{}構文を使用している場合

Javascriptが常に文字列としてオブジェクトのキーを扱います:つまり

{_key:_value} 

、オブジェクト基本的には次のように扱われます:

{ '_key': _value } 

私はあなたが欲しいと思うものではありません。私はそれが判明したとして、実際に、私は本当にハッシュをしたいんやろうとしたものではありません

var temp = {}; 
temp[_key] = _value; // here, the _temp symbol is interpreted as a js variable 
+0

:これを克服するための1つの一般的なアプローチは、オブジェクトを作成し、このような[]演算子を使用することです。キー名を引用符で囲むことはPythonの習慣です:)質問はなぜ "_key"変数がヌークされ、 "_value"変数が生き残ったのかということでした。私はコードを追跡して理由を調べることができませんでした。 –

+0

申し訳ありませんが、私はあなたの声明に従っていません。ハッシュをしたいのはどういう意味ですか?引用符で囲んでキーを囲むというあなたの習慣はどういう意味ですか?私の答えを明確にするために、var someKey = 'abcd'; var o = {someKey: 'z'}; {'abcd': 'z'}ではなく、{someKey ':' z '}というoを与えます。 – Ren

関連する問題