栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在MongoDB中的Spring数据中使用动态模式?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在MongoDB中的Spring数据中使用动态模式?

您可能想知道,Spring或Java是否是解决您问题的正确解决方案-为什么不使用更动态的工具,例如Ruby,Python或Mongoshell?

话虽这么说,让我们专注于技术问题。

如果您的目标只是存储随机数据,则基本上可以定义自己的控制器并直接使用MongoDB Java驱动程序。

如果您确实坚持为域对象类没有预定义的架构,请使用以下命令:

@document(collection = "users")public class User implements UserDetails {    @Id    private String id;    private Map<String, Object> schemalessData;    // getters/setters omitted}

基本上,它为您提供了一个容器,您可以在其中放置所需的任何内容,但要注意序列化/反序列化问题(如果嵌套文档中有ObjectId和DBRef,则可能会很棘手)。另外,如果您的数据层次结构变得过于复杂,则更新数据可能会变得令人讨厌。

仍然,在某个时候,您将意识到您的数据确实具有可以精确定位并放入定义明确的POJO中的模式。

更新资料

由于人们仍然碰巧在2020年仍会阅读此文章,所以进行了最新更新:Jackson注释JsonAnyGetter和JsonAnySetter使您可以隐藏无模式数据容器的根,以便您可以将未知字段作为有效负载中的顶级字段发送。它们仍将嵌套存储在您的MongoDB文档中,但是当通过Spring请求资源时,它们将显示为顶级字段。

@document(collection = "users")public class User implements UserDetails {    @Id    private String id;    // add all other expected fields (getters/setters omitted)    private String foo;    private String bar;    // a container for all unexpected fields    private Map<String, Object> schemalessData;    @JsonAnySetter    public void add(String key, Object value) {        if (null == schemalessData) { schemalessData = new HashMap<>();        }        schemalessData.put(key, value);    }    @JsonAnyGetter    public Map<String, Object> get() {        return schemalessData;    }    // getters/setters omitted}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508273.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号