mongo db在更新中尝试编辑_id字段时抛出错误

时间:2018-02-01 11:36:26

标签: java mongodb spring-data-mongodb

我正在尝试更新文档

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相同

1 个答案:

答案 0 :(得分:2)

来自docs

  

将映射没有注释但名为id的属性或字段   到了_id领域。

     

查询和更新时,MongoTemplate将使用转换器   处理与之对应的Query和Update对象的转换   以上规则用于保存文档所以使用的字段名称和类型   您的查询将能够与您的域类中的内容相匹配。

因此,如果需要更新,请使用除_id或id以外的其他名称的字段。