node-mongodb findOne行为

时间:2012-04-06 19:20:44

标签: javascript node.js mongodb

我有一个奇怪的问题,我似乎无法解释。鉴于以下内容:

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

1 个答案:

答案 0 :(得分:1)

如果您使用{}语法,Javascript总是将对象的键视为字符串,就像您将其传递给findOne方法一样:

{_key:_value}

换句话说,上面的对象基本上被视为:

{ '_key': _value }

我认为不是你想要的。克服这个问题的一种常见方法是创建一个对象并使用[]运算符,如下所示:

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