node-mongodb findOne behavior

I have a strange issue that I can't quite seem to explain. Given the following:

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 works like a charm. However, findOne always returns null when executed. I fired up node-debugger to find out what the deal was and I discovered that one of the passed variables is being destroyed/erased somehow. _key always seems to be erased. _value however is always there. I tried renaming _key to something else and no matter what, it's always erased. Any ideas as to what might be happening would be appreciated. thanks!

Update I just refactored a bit to allow for a more flexible search query and made it work with one variable. I'd still like to know what's going on. I feel like it's some closure business that i'm not quite understanding.

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

Javascript would always treat the key of object as a string if you use the {} syntax as you did when you passed it to the findOne method:

{_key:_value}

In other words, the object above is basically treated as:

{ '_key': _value }

which I don't think is what you want. One common approach to overcome this is to create an object and use the [] operator like this:

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