SpringMongo - 发现文档结构
Posted
技术标签:
【中文标题】SpringMongo - 发现文档结构【英文标题】:SpringMongo - discover document structure 【发布时间】:2016-08-22 19:11:01 【问题描述】:我有一个客户的数据库,其中包含一个集合,其中的文档字段可以彼此不同。我可以依赖一些常量字段,但至于其余部分 - 我无法缩小字段列表,因为客户希望解决方案是动态的。 我的问题是——我能否以某种方式实现一个通用映射,比如使用 Spring Data 返回文档字段的映射?
编辑:
感谢您的提示。我尝试使用实体获取通用对象(希望能够将其转换为地图):
@Document(collection = "Data")
public class DataEntity
@Id
private String id;
private Object data;
public Object getData()
return data;
public void setData(Object data)
this.data = data;
public String getId()
return id;
public void setId(String id)
this.id = id;
但是使用 MongoRepository 通过 ID 获取对象会生成一个数据字段设置为 null 的对象。 我正在使用 SpringBoot 1.3.1.RELEASE 和 spring-boot-starter-data-mongodb 1.3.1.RELEASE。
【问题讨论】:
查看here 以获得类似问题的答案。还讨论了一些含义here。 @Marc 谢谢,我刚刚试过了。知道为什么这对我不起作用吗?我在数据字段中得到一个空值。我已经检查过查询的条目确实有一些额外的字段。 正如@titogeo 在他的评论中提到的那样,您需要将所有“动态”字段放在数据库对象的 properties (或任何名称)字段中以获得解决方案工作。 我明白了。问题是 - 我不管理数据库结构,我的应用程序需要对第 3 方提供的数据库执行一些只读操作。哦,好吧,我会尝试破解一些东西,谢谢。 【参考方案1】:您可以将地图用于动态属性,如下所示。这是你要找的吗?
@Document(collection = "computers")
public class Computer
@Id
private String id;
@Field("name")
private String name;
//Other constant fields
@Field("properties")
private Map<String, Object> properties;
【讨论】:
这就是我的意思 - 但我没有像“属性”这样的常量字段名称来存储所有动态字段。所有动态字段都在主文档级别。例如:"_id": ObjectId("123456789"), "name": "blablabla", "dynamic_field_1": "dynamic1", "dynamic_field_2": "dynamic2", etc...
我已经尝试过您的解决方案,但属性字段被设置为 null。
将所有动态字段作为地图。以上是关于SpringMongo - 发现文档结构的主要内容,如果未能解决你的问题,请参考以下文章