我有一个Pojo,属性为
Class A{
@Id
@Field("item_id")
private String itemId;
}
当我尝试如下基于itemId更新MongoDB集合中的文档时,它运行良好,并且能够从mongo ops日志中看到查询已转换为“ _id in itemIds”
Query query = new Query(Criteria.where("itemId").in(itemIds));
Update update = new Update();
update.set("field2", "abd");
mongoTemplate.updateMulti(query, update, A.class)
当我升级到spring-data-mongodb-2.1.5.RELEASE时,我在mongo日志中看到的查询是“ itemIds中的item_id”。由于item_id不是字段,并且在集合中也没有该字段的索引,因此查询花了很长时间才能完成。
任何帮助您了解为何spring-data库在较旧版本中将查询构建为_id并在较新版本中使用该字段的原因?
答案 0 :(得分:1)
在Spring文档(https://docs.spring.io/spring-data/mongodb/docs/1.3.3.RELEASE/reference/html/mapping-chapter.html)上搜索2分钟后:
以下概述了将哪个字段映射到“ _id”文档字段:
- 用@Id(org.springframework.data.annotation.Id)注释的字段将被映射到'_id'字段。
- 没有注释但名为id的字段将被映射到'_id'字段。
您已经尝试过吗?