首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring Boot和Mongo - findById仅适用于ObjectID,而不适用于字符串Id

Spring Boot是一个用于构建Java应用程序的开发框架,它简化了Java开发过程,提供了一套开箱即用的配置和约定,使开发人员能够快速构建可靠的、可扩展的应用程序。

Mongo是一种NoSQL数据库,它以文档的形式存储数据。在Mongo中,每个文档都有一个唯一的ObjectID作为其默认主键。

findById是Spring Data MongoDB提供的一个方法,用于根据给定的ID查找文档。在Spring Boot中,如果使用findById方法进行查询,它默认会将传入的ID转换为MongoDB的ObjectID类型,然后进行查找。

然而,如果使用字符串类型的ID进行查询,findById方法将无法正常工作,因为它期望的是一个ObjectID类型的ID。这是因为MongoDB在内部将字符串ID转换为ObjectID进行匹配。

解决这个问题的一种方法是使用MongoTemplate的find方法,通过Query对象来构建查询条件,可以使用字符串ID进行查询。例如:

代码语言:txt
复制
Query query = new Query(Criteria.where("_id").is(id));
List<MyDocument> result = mongoTemplate.find(query, MyDocument.class);

在这个例子中,我们使用了MongoTemplate的find方法,通过Criteria对象构建了一个查询条件,其中"_id"表示MongoDB中的主键字段,is方法用于匹配给定的ID。最后,我们指定了返回结果的类型为MyDocument类。

Spring Boot和Mongo的组合在开发中非常常见,特别适用于构建基于文档存储的应用程序,如博客、社交媒体平台等。它们的优势包括:

  1. 简化的开发流程:Spring Boot提供了自动配置和约定大于配置的原则,使开发人员能够快速启动和开发应用程序,而MongoDB作为一种灵活的文档数据库,可以方便地存储和检索数据。
  2. 高性能和可扩展性:MongoDB具有高性能和可扩展性的特点,可以处理大量的并发请求,并且可以通过添加更多的节点来扩展存储容量和处理能力。
  3. 强大的查询功能:MongoDB提供了丰富的查询功能,可以根据各种条件进行灵活的数据检索,而Spring Boot提供了简单易用的集成方式,使开发人员能够方便地构建和执行查询。
  4. 腾讯云相关产品推荐:腾讯云提供了一系列与云计算和数据库相关的产品和服务,其中包括云服务器、云数据库MongoDB、云原生应用引擎等。您可以通过访问腾讯云官网了解更多相关产品和详细信息。

腾讯云云服务器:https://cloud.tencent.com/product/cvm 腾讯云云数据库MongoDB:https://cloud.tencent.com/product/cmongodb 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke

请注意,以上答案仅供参考,具体的技术选型和产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MongoDB

文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。 MongoDB 区分类型大小写。 MongoDB 的文档不能有重复的键。 文档的键是字符串。...用于存储布尔值(真/假)。 Double 双精度浮点值。用于存储浮点值。 Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值最高值相对比。...Object ID 对象 ID用于创建文档的 ID。 Binary Data 二进制数据。用于存储二进制数据。 Code 代码类型。用于在文档中存储 JavaScript 代码。...-1 来指定排序的方式,其中 1 为升序排列, -1 是用于降序排列。...5.2 搭建开发环境 初始化工程 使用 Spring Initializr 快速初始化一个 Spring Boot 工程 Group:com.oy Artifact:mongodb 引入依赖 pom.xml

4.6K20

Spring认证中国教育管理中心-Spring Data MongoDB教程二

设计目标是尽可能轻松地在基本 MongoDB 驱动程序MongoOperations. 两个 API 之间的主要区别是MongoOperations可以传递域对象不是Document....11.5.1.如何_id在映射层中处理字段 MongoDB 要求您有一个_id包含所有文档的字段。如果您不提供,驱动程序将分配ObjectId一个生成的值。...如果无法转换为,则该值将作为字符串存储在数据库中。...ObjectIdConverterObjectId 使用 Spring将在 Java 类中id声明的属性或字段BigInteger转换为 并存储为。...某些环境需要自定义方法来映射Id值,例如存储在 MongoDB 中的未通过 Spring Data 映射层运行的数据。文档可以包含_id可以表示为ObjectId或 的值String。

2.6K20

Spring认证中国教育管理中心-Spring Data MongoDB教程十三

所有嵌套对象都作为嵌套对象存储在文档中,不是作为 DBRef 存储。 转换器使用任何注册的 Spring 转换器来覆盖对象属性到文档字段值的默认映射。 对象的字段用于在文档中的字段之间进行转换。...如果id在 Java 类中将命名字段声明为 String 或 BigInteger,则将尽可能将其转换为 ObjectId 并存储为 ObjectIdObjectId 作为字段类型也是有效的。...如果您id在应用程序中指定了一个值,那么 MongoDB 驱动程序会检测到 ObjectId 的转换。如果指定的id值无法转换为 ObjectId,则该值将按原样存储在文档的 _id 字段中。...自动索引创建适用于用@Document. 默认情况下禁用 自动索引创建,需要通过配置启用(请参阅索引创建)。...它们是在类级别不是在单个属性上定义的。 复合索引对于提高涉及多个字段条件的查询的性能非常重要 这是一个lastName以升序age降序创建复合索引的示例: 示例 185.

2.8K20

Kubernetes 上 Java 应用的最佳实践

大多数这些建议也适用于其他语言。但是,我正在考虑 Java 特性范围内的所有规则,并且还展示了可用于基于 JVM 的应用程序的解决方案工具。...对于我在 Kubernetes 上连接 MongoDB 的简单 Spring Boot 应用程序,无限制甚至 0.5 核之间的差异是显着的。...Paketo Buildpacks 目前是构建 Spring Boot 应用程序的默认选项(使用 mvn spring-boot:build-image 命令)。让我们为我们的示例应用程序尝试一下。...当然,同样的规则也适用于其他流行的 Java 框架。另一方面,一个好的做法是检查您的主要应用程序端口——尤其是在 readiness 探针中。...我使用几个可用的 Paketo Java 构建包测量了与 Mongo 数据库交互的 Spring Boot 3 应用程序的不同 JDK 性能。

12710

Spring Boot 中使用 MongoDB 增删改查

缺点 不支持事务操作 MongoDB 占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了) MongoDB没有如MySQL那样成熟的维护工具 无法进行关联表查询,不适用于关系多的数据...:20000/demo 多个IP集群的配置: spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2....它有以下几种注释: @Id - 文档的唯一标识,在mongodb中为ObjectId,它是唯一的,通过时间戳+机器标识+进程ID+自增计数器(确保同一秒内产生的Id不会冲突)构成。...实现 提供增删改查 MongoDB 接口实现 Spring Data Mongo提供了一个 MongoTemplate类似于Spring的设计的类JdbcTemplate。...福利 Spring Boot 学习教程 会不定时更新技术, 欢迎 Star Fork。

3.1K70

技术干货| 如何在MongoDB中轻松使用GridFS?

GridFS是用于存储检索超过16 MB大小限制的BSON文档文件的规范。...GridFS不仅可用于存储超过16 MB的文件,而且还可用于存储您要访问的任何文件不必将整个文件加载到内存中。另请参阅何时使用GridFS。...此值为字符串类型。 files.filename 可选的。GridFS文件的可读名称。 files.contentType 过期 可选的。GridFS文件的有效MIME类型。应用程序用。...别名字符串数组。仅用于应用程序 使用files.metadata来存储与GridFS文件的MIME类型有关的信息。 files.metadata 可选的。...files集合 files集合很小,包含元数据。GridFS所需的所有密钥都不适合在分片环境中进行平均分配。保留未分片的files允许所有文件元数据文档保留在主分片上。

6.4K30

《深入实践Spring Boot》阅读笔记之一:基础应用开发

公司技术委员会也推荐使用spring boot,之前在各个技术网站中也了解过,它可以大大简化spring配置各个组件的使用,与其关系密切的Spring Cloud可以很好支持微服务的开发。...本书从技术、实践原理3个维度对Spring Boot进行了系统且深入的讲解,作者由浅入深逐步带我们了解Spring Boot。...第一部分 - 技术维度 针对性地介绍了Spring Boot入门、数据库的使用访问性能提升、界面设计、安全设计等重要技术知识,以实用性为主,帮助我们快速掌握Spring Boot开发方法精髓,尽快融入生产实践中...(id); } @CachePut(value = "mysql:findById:role", keyGenerator = "objectId") public Role...它更加形象贴切地表现了实体之间的关系,而且这个实体-关系模型是可以不经过任何转换直接存入数据库的,这将很大程度上减轻设计工作和沟通成本。

1.8K90
领券