簡體   English   中英

node-mongodb findOne 行為

[英]node-mongodb findOne behavior

我有一個奇怪的問題,我似乎無法解釋。 鑒於以下情況:

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 以找出交易是什么,我發現其中一個傳遞的變量正在以某種方式被銷毀/擦除。 _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)
        });
      }
    });
};

如果您像將其傳遞給 findOne 方法時那樣使用 {} 語法,Javascript 將始終將 object 的鍵視為字符串:

{_key:_value}

換句話說,上面的object基本上被當作:

{ '_key': _value }

我不認為這是你想要的。 克服這個問題的一種常見方法是創建一個 object 並像這樣使用 [] 運算符:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM