我正在使用平均堆栈我正在尝试更新以下对象:
{
_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中找到这些对象有人知道为什么司机会这样做吗?我的数据可能已经腐败了吗?
干杯!
答案 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
是一个字符串。
希望这有助于某人!