2015-08-25 22 views
0

我與平均堆棧我試圖更新下列對象工作:findOneAndUpdate工作的一部分時間。 MEAN堆棧

{ 
_id : "the id", 
fields to be updated.... 
} 

這是做更新的功能:

function updateById(_id, update, opts){ 
    var deferred = Q.defer(); 
    var validId = new RegExp("^[0-9a-fA-F]{24}$"); 
    if(!validId.test(_id)){ 
     deferred.reject({error: 'invalid id'}); 
    } else { 
     collection.findOneAndUpdate({"_id": new ObjectID(_id)}, update, opts) 
     .then(function(result){ 
      deferred.resolve(result); 
     }, 
     function(err){ 
      deferred.reject(err); 
     }); 
    } 

    return deferred.promise; 
} 

這適用於一些我的對象,但不與其他人一起工作。 這是返回什麼時候更新失敗:

{ 
ok: 1, 
value:null 
} 

當函數成功地更新對象它返回:

{ 
lastErrorObject: {} 
ok: 1 
value: {} 
} 

好像蒙戈是無法找到的對象我試圖在失敗時進行更新。但是,我可以使用_id在Mongo shell中找到這些對象。

有人知道爲什麼司機會這樣做嗎?我的數據可能已經腐敗了嗎?

乾杯!

回答

0

我找到了答案,現在這個問題似乎更模糊,所以我很抱歉,如果它是混亂。

我能夠使用ObjectID(_id)找到一些文檔的原因是因爲我手動生成了一些使用字符串的_id字段。

現在我覺得自己像一個白癡,但不刪除這個問題,我決定發佈答案,以防萬一有人遇到類似的問題。如果您將_id保存爲字符串查詢_id字段更改的集合。

查詢集合與MongoDB的生成_id S:

collection.findOneAndUpdate({"_id": new ObjectID(_id)}, update, opts) 

查詢集合與手動生成_id S:

collection.findOneAndUpdate({"_id": _id}, update, opts) 

在第二個例子_id是一個字符串。

希望這可以幫助別人!