当前位置: 首页 > 知识库问答 >
问题:

使用fieldName而不是_id的spring-data-mongodb

韦辰钊
2023-03-14
    Class A{ 
        @Id
        @Field("item_id")
        private String itemId;
    }

当我试图根据下面的itemId更新MongoDB集合中的文档时,它工作得很好,并且能够从mongo ops日志中看到查询被转换为“itemIds中的_id”。

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日志中看到的查询是“item_id in itemids”。由于item_id不是一个字段,集合中也没有该字段的索引,因此查询需要花费很长时间才能完成。

有没有帮助理解为什么spring-data库在旧版本中构建查询asid,而在新版本中使用字段?

共有1个答案

宗穆冉
2023-03-14

在Spring文档(https://docs.Spring.io/spring-data/mongodb/docs/1.3.3.release/reference/html/mapping-chapter.html):

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

  • 用@id(org.springframework.data.annotation.id)批注的字段将映射到“_id”字段。
  • 没有批注但命名为id的字段将映射到“_id”字段。
 类似资料:
  • 一切都工作得很好,在我的集合_id=“user”中,正如我所期望的那样。 但是,如果我现在想查询那个对象: 我收到null。调试日志显示用 //编辑: 返回true...

  • 我正在探索Spring数据REST库以构建RESTAPI。 但在许多示例中,我看到RESTAPI是从Crudepository生成的。 我想知道这在生产中是否真的有用?在我看来,快速启动和运行某些东西很容易,但我宁愿将RESTAPI与“真正的”服务相结合,而不是“仅仅”与存储库相结合。 你对此有何看法? 亲切的问候B

  • 问题内容: 我正在使用猫鼬(节点),输出id而不是_id的最佳方法是什么? 问题答案: 我在执行此操作的模型上创建toClient()方法。这也是重命名/删除您不想发送给客户端的其他属性的好地方:

  • 我有一个entity类,它有一个映射为的自然ID字段,而我没有任何代理ID(仅为表ID发明的字段)字段。并且,在Jackson编组的JSON中,我看到了一个额外的。 所以不是: 我支持这些依赖: Spring Boot 2.0.3。

  • 我在将Spring Data Redis1.5.2.Release迁移到1.7.2.Release时遇到问题,因为RedisCacheManager在1.5.2.Release中使用RedisTemplate和在1.7.2.Release中使用RedisOperations作为构造函数参数。下面是我当前的Spring数据Redis配置,截止到1.5.2.版本。我应该如何为1.7.2.版本配置它?

  • 问题内容: 随着spring引导 1.5.6.RELEASE我能够发送HTTP状态代码,而不是在描述如何让春天的安全响应未经授权(HTTP 401码)如果请求URI不进行认证,这样做: 使用课程。 我刚刚升级到Spring Boot 2.0.0.RELEASE,发现不再有此类(至少在该软件包中)。 问题: Spring Boot中是否存在此类()? 如果不是,那么在现有项目中保持相同行为,以便与依