首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

情况

我们有文档如下:
{
“_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);
}
返回列表