うまく説明できない奇妙な問題があります。以下を考えると:
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 を返します。node-debugger を起動して取引内容を調べたところ、渡された変数の 1 つが何らかの形で破棄/消去されていることがわかりました。_key は常に消去されているようです。ただし、_value は常に存在します。_key の名前を別のものに変更しようとしましたが、何があっても常に消去されます。何が起こっているのかについてのアイデアをいただければ幸いです。ありがとう!
更新 より柔軟な検索クエリを可能にするために少しリファクタリングし、1 つの変数で動作するようにしました。どうなっているのかまだまだ知りたいです。私がよく理解していないのは、閉鎖ビジネスのように感じます。
Generics.prototype.findOne = function(collection, searchKeys, callback) {
this.getCollection(collection,function(error, document_collection) {
if( error ) callback(error)
else {
document_collection.findOne(searchKeys, function(error, result) {
if( error ) callback(error)
else callback(null, result)
});
}
});
};