0

在我的 Mongo DB 文档中,我曾经有一个已转换为嵌套文档的嵌套数组。因此,例如,现在我的文档如下所示:

{
    projects : {
        "id1" : {
            name : "project 1"
            parentProject : null
        },
        "id2" : {
            name : "project 2"
            parentProject : null
        },
        "id3" : {
            name : "sub project 1"
            parentProject : "id1"
        }.
    }
}

当我在 PHP 中获取这个对象时,我有一个大小为 3 的数组,每个都由项目的 ID 键入:

array(
  'id1' => array('name' => 'project 1', 'parentProject' => null),
  'id2' => array('name' => 'project 2', 'parentProject' => null),
  'id3' => array('name' => 'project 3', 'parentProject' => 'id1')
)

我需要将其转换为分层数组,但我遇到了逻辑问题。有人可以帮我将其转换为以下形式的内容:

array(
  array('ID' => 'id1', 'name' => 'project 1', 'subProjects' => 
      array('ID' => 'id3', 'name' => 'project 3', 'subProjects' => null)),
  array('ID' => 'id2', 'name' => 'project 2', 'subProjects' => null)
)
4

2 回答 2

0

我能够提出以下解决方案:

public function createProjectHierarchy($projects, $parentId = null)
{
    $tree = array();

    foreach($projects as $projectKey => $project)
    {
        if($parentId == $project['parentProjectId'])
        {
            $project['subProjects'] = self::createProjectHierarchy($projects, $projectKey);
            $project['ID'] = $projectKey;
            unset($project['parentProjectId']);
            unset($projects[$projectKey]);

            array_push($tree, $project);
        }
    }

    return $tree;
}

这会以我需要的方式返回完全填充的层次结构。希望 MongoDB 将很快支持多个位置运算符,以便我可以将我的数据作为数组(和嵌套数组)保存在数据库中。

于 2013-10-04T19:57:30.253 回答
-1

一种选择是以代码中需要的形式存储它。因此,“id3”对象可能只是“id1”项目中的一个元素。类似于以下内容:

"id1": { 
  name:"project1", 
  subProjects:{ 
    "id3": { name:"project3" } 
  }
}

另一种选择是将每个项目存储为它自己的文档并使用 MongoDB 文档中的“模型树结构”数据模型之一:http: //docs.mongodb.org/manual/data-modeling/

于 2013-10-05T21:55:25.307 回答