有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

蒙哥的爪哇国家和城市关系

由于mongo是一个nosql数据库,我有点困惑如何用java表示mongo集合/文档对应的数据模型

我有一个person表单,有一个字段Country和第二个City。当我选择country时,特定国家的城市列表将填充下拉列表。在典型的SQL关系中,它是一对多关系

我了解了如何在mongo中存储它的可能性-我可以使用eMebeded文档来实现它,因此一个带有List<String>城市名称的Country对象:

{
   _id: "PL",
   name: "Poland",
   cities: [
                {
                  city: "Lodz",
                  state: "LDZ",
                  zip: "XX-XXX"
                },
                {
                  city: "Warsaw",
                  state: "MZK",
                  zip: "XX-XXX"
                }
              ]
 }

然而,每次我从DB接人时,我也会把整个国家和所有城市都接过来,这是没有道理的。因此,唯一可行的方法是创建两个单独的集合(城市、国家)并创建DBRef,然后在Person模型中创建两个字段,一个用于城市,一个用于国家,但是这两个特定的类是什么样的呢?城市应该有国家身份证吗?这是正确的思维方式还是我走错了方向有人能给我举一个mongo JSON和java类的例子吗


共 (1) 个答案

  1. # 1 楼答案

    你的方法似乎还可以。在我看来,在这种情况下,您应该免费使用它,而不使用dbrefs。因为Mongo是基于文档的nosql db,所以嵌入式文档是存储数据的主要方式

    在获取country时,不需要获取country下的所有城市

    简单的例子:db.country.find( { name: "Poland" }, {name: 1, id: 1 } )只返回name和id字段

    城市可能有自己的id。人物模型可能有城市(可能是所有关于它的东西)和国家(您可以只保存id和姓名字段)字段,正如您所说的

    国家/地区(仅添加额外的城市id):

    {
       _id: "PL",
       name: "Poland",
       cities: [
                    {
                      _id: "1",
                      city: "Lodz",
                      state: "LDZ",
                      zip: "XX-XXX"
                    },
                    {
                      _id: "2",
                      city: "Warsaw",
                      state: "MZK",
                      zip: "XX-XXX"
                    }
                  ]
     }
    

    人:

    {
           _id: "1",
           name: "John",
           surname: "Doe",
           country: {_id:"PL",name="Poland"},  // I think you can save without citylist, country object
           city: {
                     _id: "2",
                      city: "Warsaw",
                      state: "MZK",
                      zip: "XX-XXX"
           }
    

    在这种情况下,我的回答只是一个观点(您对java类的请求,它显示了与某些框架的差异,您也可以将这些文档视为pojo)