在单个mongodb查询中返回父子链?

时间:2014-01-24 01:56:34

标签: mongodb directory

我有一个类似于文件系统的结构,其中有一堆文件夹,每个文件夹都包含其父文件夹的Object Id。给定一个特定的文件夹,我想返回该文件夹的路径;我能想到的唯一方法是遍历链接的Object Ids树,直到我到达root。

使用db.find执行此操作,我必须发送相当于文件夹深度的一些查询。然而,这不会扩展,所以我想知道有一种方法可以让mongo在一个请求中为我链接连接的ID。这可能吗?或者至少有更好的方法吗?

3 个答案:

答案 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