我正在尝试更新文档
final Update update = new Update();
update.set("id", String.valueOf(partnerId));
update.pushAll("appIds", appIds.toArray());
mongoTemplate.upsert(Query.query(Criteria.where("partnerId").is(partnerId)), update, PartnerAppIds.class);
执行此操作时收到此错误
{ "err" : "After applying the update to the document {_id: \"66\" , ...}, the (immutable) field '_id' was found to have been altered to _id: \"5}
该文件看起来像这样
public class PartnerAppIds {
@Indexed
private String id;
@Indexed
private Long partnerId;
@Indexed
private Set<String> appIds;
public Long getPartnerId() {
return partnerId;
}
public void setPartnerId(Long partnerId) {
this.partnerId = partnerId;
}
public Set<String> getAppIds() {
return appIds;
}
public void setAppIds(Set<String> appIds) {
this.appIds = appIds;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
我的问题是因为我有一个id字段,为什么mongo假设我正在更新'_id'字段,我在这里更新id字段。这里是mongo的_id和id相同
答案 0 :(得分:2)
来自docs,
将映射没有注释但名为id的属性或字段 到了_id领域。
查询和更新时,MongoTemplate将使用转换器 处理与之对应的Query和Update对象的转换 以上规则用于保存文档所以使用的字段名称和类型 您的查询将能够与您的域类中的内容相匹配。
因此,如果需要更新,请使用除_id或id以外的其他名称的字段。