我最近开始研究mongodb。我的简单应用程序将具有像
这样的Geo层次结构Continet - >国家 - >地区--->度假村 - >住宿
我的数据将是这样的
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a44"),
"name" : "Europe",
"parent" : "",
"type" : "Continent",
"synonym" : "",
"code" : "EEE"
}
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a47"),
"name" : "Bulgaria",
"parent" : "EEE",
"type" : "Country",
"synonym" : "",
"code" : "BGR"
}
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a45"),
"name" : "Albania",
"parent" : "EEE",
"type" : "Country",
"synonym" : "",
"code" : "ALB"
}
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a48"),
"name" : "Bourgas Region",
"parent" : "BGR",
"type" : "Region",
"synonym" : "",
"code" : "002682"
}
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a49"),
"name" : "Obzor",
"parent" : "002682",
"type" : "Resort",
"synonym" : "",
"code" : "002911"
}
{
"_id" : ObjectId("54854d5af2ef42fe7d4d2a4a"),
"name" : "Sunny Beach",
"parent" : "002682",
"type" : "Resort",
"synonym" : "",
"code" : "002548"
}
{
"_id" : ObjectId("54854d5af2ef42fa7d4d2b3d"),
"name" : "Hotel Park Avenue",
"parent" : "002548",
"type" : "Accommodation",
"synonym" : "",
"code" : "022548"
}
如上所示,每个文档中只有直接父母。
现在我必须让所有的父母和孩子都使用“代码”:“002548”
如果我有度假村代码,我必须获得所有住宿,其中有相应的度假村作为父母,我必须得到度假村所属的目的地,国家,大陆。
我觉得应该有递归查询才能得到这个,我使用MongoTemplate进行数据库操作。
请帮助我为此获得最佳解决方案。
提前致谢。
答案 0 :(得分:2)
mongodb不支持联接,因此您必须执行多个查询才能使用该层次结构。
答案 1 :(得分:0)
了解您在这些文档上运行的查询类型会有所帮助,但我猜测感兴趣的级别为Resort
和Accomodation
。您已将较高的三个级别构建为单独的文档,但在我看来,它们是Resorts
和Accomodations
的属性:Resort
位于给定区域,国家/地区,大陆。此外,地区,国家和大陆不会发生太大变化。我认为更高级别的地理信息是嵌入Resort
和Accommodation
文档的理想选择:
{
"_id" : ObjectId("54854d5af2ef42fa7d4d2b3d"),
"name" : "Hotel Park Avenue",
"type" : "Accommodation",
"synonym" : "",
"code" : "022548",
"region" : "New York",
"country" : "United States",
"continent" : "North America"
}
通过这种结构,找到父母"像上面这样的住宿只是看地区,国家,大陆的价值观。寻找孩子"例如,一个国家是一个简单的查询:
db.stuff.find({ "country" : "United States" })