我有一个类似于文件系统的结构,其中有一堆文件夹,每个文件夹都包含其父文件夹的Object Id。给定一个特定的文件夹,我想返回该文件夹的路径;我能想到的唯一方法是遍历链接的Object Ids树,直到我到达root。
使用db.find执行此操作,我必须发送相当于文件夹深度的一些查询。然而,这不会扩展,所以我想知道有一种方法可以让mongo在一个请求中为我链接连接的ID。这可能吗?或者至少有更好的方法吗?
答案 0 :(得分:2)
在一个MongoDB查询中没有真正的方法可以像你要求的那样进行。
您可以将路径反规范化为每个对象,因此不必走所有父项。但任何变化都需要对每个孩子进行更新。
基本上每个folder
都有......
{
...,
name: "my_folder",
path: "\path\to\folder",
children: ...,
}
当您更新folder
时,您需要走过该文件夹的子项并通过parent.path
更新它们,添加parent.name
,并将其打到孩子的path
中属性。更新链条。更新更昂贵,但阅读更便宜。
答案 1 :(得分:0)
MongoDB documentation有一些模型树结构模型的例子。
检查其中一个是否符合您的要求。根据您提供的信息,我会说祖先阵列可能是一个不错的选择。
答案 2 :(得分:0)
我相信你想做的事情与使用树模型非常相似。 我理解你的数据目前没有祖先字段,但这将是解决问题的最佳方法之一:
folder
{
_id: 100,
folder_name: "foo",
ancestors: [80, 23, 1]
}
请查看MongoDB大学(10gen)的视频,以获得进一步说明: https://www.youtube.com/watch?feature=player_embedded&v=lIjXyQklGWY