如何在Spring Data MongoDB 中保存和查询动态字段

本文介绍了如何在Spring Data MongoDB中处理动态字段。Stack Overflow上的问答指出,不能直接使用或继承Java集合类作为实体,而是推荐使用DBObject配合MongoTemplate。在Spring Data MongoDB的最新版本中,可以通过MongoTemplate的insert和save方法直接操作Map数据,实现了动态字段的存储和查询。
摘要由CSDN通过智能技术生成

原文: https://stackoverflow.com/questions/46466562/how-to-save-and-query-dynamic-fields-in-spring-data-mongodb

MongoDB 的一大特点就是所有的记录都是文档形式,无所谓数据库字段,每一条数据都是独立的。在使用Spring Data MongoDB 时,如果直接用关系型数据库的用法去套,那会发现很难发挥MongoDB的特性。

我在搜索如何解决问题的时候,发现了一篇问答正好能解决我的问题,所以我用自己浅薄的英语做个简单的翻译。

这是一篇 Stack Overflow 上的问答

有人提了个问题,在使用 Spring Boot 1.4.x 和 Spring Data MongoDB 时,想要动态存储实体的字段,而不是直接用一个已经定义好的实体的固定字段存储。

虽然可以在实体类内部创建一个Map属性来存动态字段,但提问者想要的是所有的字段都处于MongoDB文档的顶层,不想要在字段里面还存在额外的数据结构。

提问者尝试后发现,直接将实体类继承自HashMap是不行的

Error creating bean with name 'entryRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.model.MappingException: Could not lookup mapping metadata for domain class java.util.HashMap!

问题的优质回答:

先讲结论:

  • 不能直接使用或者继承java集合类作为实体类
  • Spring Data MongoDB 的 Repositories 不能实现上面的需求
  • 使用 DBObject 类配合 MongoTemplate 才能实现

分析;
Spring Data Repositories 是MongoDB用在设计好的数据结构中的持久层,为了配合面向对象设计使用。Spring Data 在分析检查类的时候,会将集合和Map类型的类剔除出去。

Repository 的查询方法虽然也可以实现动态字段查询,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值