簡體   English   中英

findOneAndUpdate在部分時間工作。 平均堆棧

[英]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.

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