【问题标题】:How should I store this set of data into a Mongo Collection我应该如何将这组数据存储到 Mongo 集合中
【发布时间】:2014-07-17 20:16:45
【问题描述】:

我有以下数据结构

{
   "routers": [
   {
      "name": "",
      "ip address": "",
   }
   ],

   "devices": [
   {
      "name": "",
      "mac address": [
         <address>,
         <address>,
         <address>
      ],
   }
   ],

   "connection": [ 
   {
      "source":"<name>",

      "destination":"<name>",  

   }
   ]
}

我想将它存储在 Mongo 数据库中(在 Java Web 应用程序中)。我只是需要一些关于如何构建它的意见。

我是否将所有这些 JSON 放入一个名为“Environment”的 Mongo 集合中?

我想将数据映射到 Java 对象,我是否有三个单独的对象“路由器”、“设备”和“连接”,或者我是否创建一个 Java 对象“环境”并拥有上面列出的三个 Java 对象特定对象?我觉得第二个选项是最好的。

我非常想就设计这个的最佳方式寻求一些建议,而不是稍后尝试更改它。

没关系,但我也会使用Jongo

编辑以显示潜在课程:

private class Environment {
    private List<Router>;

    private List<Device>;

    private List<Connection>

    ...
}

会有多个“环境”,本质上我们正在构建的是一个配置管理系统,因此环境有不同的“配置”。

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    我会在 1 个集合中处理大量文档。我发现这种方式更容易搜索,也更容易编写类似 pojo 的代码。

    您的数据建模问题之前已经回答过:Mongodb: multiple collections or one big collection w/ index

    我会为 Java 使用非常多的 JSON 实用程序库(例如 GSON)中的任何一个。

    1. 创建一个 pojo 类,在数据结构中包含您需要的所有字段:

      private List<Router> routers;
      ...
      private static class Router {
          private String name;
          ...
      }
      
    2. 根据需要创建 getter/setter

    3. 使用您的实用程序转换为/从下面的实用程序类示例

      import com.google.gson.Gson;
      import com.google.gson.JsonParser;
      
      private static Gson gson = new Gson();
      private static final JsonParser parser = new JsonParser();
      
      public static <T> T toPojoObject(String json, Class<T> clazz, Gson aGson) {
          return aGson.fromJson(createJSONObject(json).getAsJsonObject(), clazz);
      }
      
      public static JsonElement createJSONObject(String json) {
          return parser.parse(json);
      }
      

    (好吧,这不是使用 GSON 的最精彩的例子,只是说明了这一点)

    【讨论】:

    • 因此,如果在 1 个集合中推荐大量文档,您是否会将所有对象包装在父“连接”对象中并将其保存为文档?
    • 不,我不会换行的。我将有 1 个文档,即名为“网络”(或其他)的类。根据上面写的 I(部分)类,网络包含您的数据结构。您在一个集合中有很多网络文档。抱歉,我实际上假设您有多个“网络”。不是这样吗?
    • 我用一个代表我最初想法的类来编辑我的原始问题。 “环境”类本质上包含网络。我们可能在这里谈论同样的事情。这个想法是将环境类的 json 版本保存到一个 Mongo 集合中
    • 好吧,我想我们说的是同一件事......相应地编辑了我的答案
    【解决方案2】:

    创建一个 java 对象“环境”并将其他对象包含在其中会更好。例如,我正在使用基于 JPA 的对象数据存储映射器,如果您将所有对象嵌入到一个实体中,您可以使用“@embedded”将其他对象嵌入到该实体中,您可以使用对数据库的一次调用来持久化所有对象,否则您必须三次访问数据库才能持久化这三个对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多