由于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类的示例吗?
答案 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)。