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

用户名

Mongodb是一个无模式文档数据库,但是在春季数据中,有必要定义实体类和存储库类,如下所示:

实体类:

@Document(collection = "users")
public class User implements UserDetails {
    @Id private String userId;
    @NotNull @Indexed(unique = true) private String username;
    @NotNull private String password;
    @NotNull private String name;
    @NotNull private String email;
}

存储库类:

public interface UserRepository extends MongoRepository<User, String> {
    User findByUsername(String username);
}

无论如何,在春季数据mongodb中是否有使用map not class的功能,以便服务器可以接受任何动态JSON数据,然后将其存储在BSON中而无需任何预定义类?

马克·塔林

首先,关于无模式数据的一些有见地的链接:

第二...您可能想知道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注释JsonAnyGetterJsonAnySetter使您可以隐藏无模式数据容器的根,以便您可以将未知字段作为有效负载中的顶级字段发送。它们仍将嵌套存储在您的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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在高度动态的模式MongoDB中使用Mongoose

来自分类Dev

如何在C#中使用Regex从特定模式中获取动态单词

来自分类Dev

如何在mongodb中搜索字段的特定动态模式。?

来自分类Dev

如何在mongodb集合中存储纬度和经度?以及如何在Spring中使用它?

来自分类Dev

如何在Spring数据Mongodb中使用ArrayOperation的Size类进行聚合?

来自分类Dev

如何在嵌套对象的春季数据中使用elemMatch从mongodb中检索数据

来自分类Dev

如何在Excel 2010中使用不同的表和数据创建动态日期标题

来自分类Dev

如何在Prolog中使用动态数据库?

来自分类Dev

如何在JPA中使用动态JNDI数据源?

来自分类Dev

如何在Java中使用动态数据创建多个arraylist

来自分类Dev

如何在Django中使用动态数据保存模板

来自分类Dev

我如何在Doctrine 2 ODM中使用mongoDB在zf2中保存数据?

来自分类Dev

如何在NetBeans中使用Java在mongodb数据库中搜索条目?

来自分类Dev

如何在php mysql中处理动态模式和动态数据?

来自分类Dev

如何在UNIX中使用文件中的模式查找行

来自分类Dev

如何在Spring Data MongoDB中使用聚合

来自分类Dev

如何在mongoDB的嵌套数据中使用聚合$ lookup?

来自分类Dev

如何在动态列名称中使用dplyr中的“摘要”?

来自分类Dev

Spring MVC应用程序中如何在Hibernate中使用Jboss数据源

来自分类Dev

如何在Laravel中使用JavaScript在模式弹出窗口中播放动态视频?

来自分类Dev

如何在Java中使用Spring Security OAuth2在资源服务器中动态配置Httpsecurity?

来自分类Dev

如何在 POJO 中使用动态键设置此 JSON 并在 Android JAVA 中从中获取数据?

来自分类Dev

在MongoDB中,如何在数组中使用“ $ expr”?

来自分类Dev

如何在MongoDB 3.2中使用DBPointer bson类型

来自分类Dev

如何在Spring Security和默认数据库H2中使用Grails数据库迁移?

来自分类Dev

如何在Spring Security和默认数据库H2中使用Grails数据库迁移?

来自分类Dev

如何在awk中使用多种模式?

来自分类Dev

如何在Delphi中使用管道模式

来自分类Dev

如何在节俭中使用异步模式?

Related 相关文章

  1. 1

    如何在高度动态的模式MongoDB中使用Mongoose

  2. 2

    如何在C#中使用Regex从特定模式中获取动态单词

  3. 3

    如何在mongodb中搜索字段的特定动态模式。?

  4. 4

    如何在mongodb集合中存储纬度和经度?以及如何在Spring中使用它?

  5. 5

    如何在Spring数据Mongodb中使用ArrayOperation的Size类进行聚合?

  6. 6

    如何在嵌套对象的春季数据中使用elemMatch从mongodb中检索数据

  7. 7

    如何在Excel 2010中使用不同的表和数据创建动态日期标题

  8. 8

    如何在Prolog中使用动态数据库?

  9. 9

    如何在JPA中使用动态JNDI数据源?

  10. 10

    如何在Java中使用动态数据创建多个arraylist

  11. 11

    如何在Django中使用动态数据保存模板

  12. 12

    我如何在Doctrine 2 ODM中使用mongoDB在zf2中保存数据?

  13. 13

    如何在NetBeans中使用Java在mongodb数据库中搜索条目?

  14. 14

    如何在php mysql中处理动态模式和动态数据?

  15. 15

    如何在UNIX中使用文件中的模式查找行

  16. 16

    如何在Spring Data MongoDB中使用聚合

  17. 17

    如何在mongoDB的嵌套数据中使用聚合$ lookup?

  18. 18

    如何在动态列名称中使用dplyr中的“摘要”?

  19. 19

    Spring MVC应用程序中如何在Hibernate中使用Jboss数据源

  20. 20

    如何在Laravel中使用JavaScript在模式弹出窗口中播放动态视频?

  21. 21

    如何在Java中使用Spring Security OAuth2在资源服务器中动态配置Httpsecurity?

  22. 22

    如何在 POJO 中使用动态键设置此 JSON 并在 Android JAVA 中从中获取数据?

  23. 23

    在MongoDB中,如何在数组中使用“ $ expr”?

  24. 24

    如何在MongoDB 3.2中使用DBPointer bson类型

  25. 25

    如何在Spring Security和默认数据库H2中使用Grails数据库迁移?

  26. 26

    如何在Spring Security和默认数据库H2中使用Grails数据库迁移?

  27. 27

    如何在awk中使用多种模式?

  28. 28

    如何在Delphi中使用管道模式

  29. 29

    如何在节俭中使用异步模式?

热门标签

归档