如何在mongodb中获取文档的所有父级和子级
我最近开始研究mongodb。我的简单应用程序将具有地理层次结构,如 Continet-->国家-->地区-->度假村-->住宿 我的数据是这样的如何在mongodb中获取文档的所有父级和子级,mongodb,mongodb-query,mongodb-java,Mongodb,Mongodb Query,Mongodb Java,我最近开始研究mongodb。我的简单应用程序将具有地理层次结构,如 Continet-->国家-->地区-->度假村-->住宿 我的数据是这样的 { "_id" : ObjectId("54854d5af2ef42fe7d4d2a44"), "name" : "Europe", "parent" : "", "type" : "Continent", "synonym" : "", "code" : "EEE" } { "_id" :
{
"_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进行db操作
请帮我找到最好的解决方案
提前感谢。mongodb不支持连接,因此您必须执行多个查询才能进入该层次结构。了解您在这些文档上运行的查询类型会很有帮助,但我猜感兴趣的级别是
Resort
和Accomation
。您已将较高的三个级别组织为单独的文档,但在我看来,它们似乎是度假酒店
和住宿酒店
:度假酒店位于给定的区域、国家或大陆。此外,地区、国家和大陆变化不大。我认为较高级别的地理信息是嵌入度假村
和住宿
文档中的一个很好的选择:
{
"_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" })
这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。他所寻找的是mongo不支持的加入。他将不得不使用多个查询。这就是答案。@Evancholy我知道我们必须使用多个查询。。。。你能建议一下在逻辑上使用多个查询的最佳方式吗?感兴趣的不仅仅是住宿和度假村。我需要所有东西,例如,如果用户搜索国家代码,我想显示所有东西,包括该国的大陆以及该国的所有地区、度假村和住宿。。。希望我清楚