遇到的问题---MongoDB的java驱动的坑---启用副本集后id的update无效

来源:互联网 发布:百鸟朝凤 知乎 编辑:程序博客网 时间:2024/06/04 00:40

情况

我们有文档如下:
{
“_id”: ObjectId(‘59f189e9861afe7aa6d684b0’),
“mobile”: “12345678”,
“reason”: 18,
“createOper”: “zhangzequan”,
“createDate”: ISODate(‘2017-10-26T07:08:25.669Z’)
}

在代码中需要对该文档进行更新,使用代码如下:
private void dealt(String resampleId, String operator, String remark) {
Update update = new Update();
update.set(“dealtOper”, operator);
update.set(“dealtDate”, FormatDate.now());
if (!StringUtils.isEmpty(remark)) {
update.set(“remark”, remark);
}
mongoOperations.updateFirst(Query.query(Criteria.where(“id”).is(resampleId)),
update,
Resample.class);
}

之前一直没问题,可以正常更新文档。
突然有一天 更新失效,而且也不报错。


原因

经过对比排查后 发现 启用副本集之后 id的update就失效了。find使用id查询正常。


解决方式

将id修改成_id,跟数据库字段的对应起来。

使用代码如下:
private void dealt(String resampleId, String operator, String remark) {
Update update = new Update();
update.set(“dealtOper”, operator);
update.set(“dealtDate”, FormatDate.now());
if (!StringUtils.isEmpty(remark)) {
update.set(“remark”, remark);
}
mongoOperations.updateFirst(Query.query(Criteria.where(“_id”).is(resampleId)),
update,
Resample.class);
}

原创粉丝点击