mongo

时间:2015-04-22 12:50:12

标签: java arrays mongodb

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

我有一个包含一个字段的人员表单,Country和第二个City。当我选择国家/地区时,来自特定国家/地区的城市列表会填充下拉列表。在典型的SQL关系中,它将是一对多的关系。

我读到了如何将其存储在mongo中的可能性 - 我可以使用emebedded文档来完成,因此Country对象的城市名称为List<String>

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

然而,每次我从DB中取人时我都没有意义。我还会在所有城市中获取整个国家/地区。因此,这样做的唯一可能性是创建两个单独的集合(城市,国家)并创建DBRef,然后在Person模型中为城市创建两个字段,为国家创建一个字段,但这两个特定类如何看起来像?城市应该有国家ID吗?这是适当的思维方式还是我走向了错误的方向? 有人能为我提供mongo JSON和java类的示例吗?

1 个答案:

答案 0 :(得分:3)

你的方法似乎没问题。在我看来,在这种情况下,你应该在没有dbrefs的情况下自由使用它。因为Mongo是基于文档的nosql db,所以嵌入式文档主要是存储数据的方式。

当您取得国家/地区时,您不需要获取该国家/地区下的所有城市。

简单示例:db.country.find( { name: "Poland" }, {name: 1, id: 1 } )仅返回名称和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)。