findOneAndUpdate的工作部分时间。 MEAN堆栈

时间:2015-08-25 20:12:03

标签: node.js mongodb

我正在使用平均堆栈我正在尝试更新以下对象:

{ 
_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中找到这些对象

有人知道为什么司机会这样做吗?我的数据可能已经腐败了吗?

干杯!

1 个答案:

答案 0 :(得分: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是一个字符串。

希望这有助于某人!