[英]findOneAndUpdate works part of the time. MEAN stack
我正在使用均值堆棧,正在嘗試更新以下對象:
{
_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: {}
}
看起來Mongo失敗時找不到我要更新的對象。 但是,我可以使用它們的_id在Mongo Shell中找到這些對象。
有人知道為什么駕駛員會這樣嗎? 我的數據可能已損壞嗎?
干杯!
我找到了答案,現在這個問題似乎更加模棱兩可,如果造成混淆,我深表歉意。
之所以能夠使用ObjectID(_id)
查找某些文檔,是因為我已經使用字符串手動生成了一些_id
字段。
現在我感覺像個白痴,但我沒有刪除此問題,而是決定發布答案,以防萬一有人遇到類似問題。 如果將_id
另存為字符串,則查詢帶有_id
字段的集合會更改。
使用MongoDB生成的_id
查詢集合:
collection.findOneAndUpdate({"_id": new ObjectID(_id)}, update, opts)
使用手動生成的_id
來查詢集合:
collection.findOneAndUpdate({"_id": _id}, update, opts)
在第二個示例中, _id
是字符串。
希望這對某人有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.