Spring boot spring数据mongodb使用字段名而不是_id

Spring boot spring数据mongodb使用字段名而不是_id,spring-boot,spring-data,spring-data-mongodb,Spring Boot,Spring Data,Spring Data Mongodb,我有一个属性为的Pojo Class A{ @Id @Field("item_id") private String itemId; } 当我尝试根据下面的itemId更新MongoDB集合中的文档时,它运行良好,并且能够从mongo ops日志中看到查询被转换为“\u id in itemIds” 当我升级到spring-data-mongodb-2.1.5.RELEASE时,我在mongo日志中看到的查询是“itemid i

我有一个属性为的Pojo

    Class A{ 
        @Id
        @Field("item_id")
        private String itemId;
    }
当我尝试根据下面的itemId更新MongoDB集合中的文档时,它运行良好,并且能够从mongo ops日志中看到查询被转换为“\u id in itemIds”

当我升级到spring-data-mongodb-2.1.5.RELEASE时,我在mongo日志中看到的查询是“itemid in itemIds”。由于item_id不是一个字段,也不是集合中该字段的索引,因此查询需要花费很长时间才能完成


了解为什么spring数据库在较旧版本中将查询构建为_id,并在较新版本中使用该字段有什么帮助吗?

在spring文档()上搜索2分钟后:

以下概述了将映射到“\u id”文档字段的字段:

  • 用@Id(org.springframework.data.annotation.Id)注释的字段将映射到“\u Id”字段
  • 没有注释但命名id的字段将映射到“\u id”字段

你已经试过了吗?

是的,我们已经在使用@Id了。文档还说您确实在使用
@Id
,但也在使用
@Field
,这是为了覆盖列的名称。因此,请尝试删除
@字段
注释,并仅保留
@Id
注释
Query query = new Query(Criteria.where("itemId").in(itemIds));
Update update = new Update();
update.set("field2", "abd");
mongoTemplate.updateMulti(query, update, A.class)