我有一个奇怪的问题,我似乎无法解释。鉴于以下内容:
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。我启动了节点调试器以找出交易是什么,我发现其中一个传递的变量正在以某种方式被销毁/擦除。 _key似乎总是被删除。然而,_value总是在那里。我尝试将_key重命名为其他内容,无论如何,它总是被删除。关于可能发生的事情的任何想法将不胜感激。谢谢!
的更新 的 我只是重构了一点,以允许更灵活的搜索查询,并使其适用于一个变量。我还是想知道发生了什么。我觉得这是一些我不太了解的关闭业务。
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)
});
}
});
};
答案 0 :(得分:1)
如果您使用{}语法,Javascript总是将对象的键视为字符串,就像您将其传递给findOne方法一样:
{_key:_value}
换句话说,上面的对象基本上被视为:
{ '_key': _value }
我认为不是你想要的。克服这个问题的一种常见方法是创建一个对象并使用[]运算符,如下所示:
var temp = {};
temp[_key] = _value; // here, the _temp symbol is interpreted as a js variable