繁体   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