在我的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)
)
答案 0 :(得分: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很快就能支持多个位置运算符,这样我就可以将数据作为数组(和嵌套数组)保存在数据库中。
答案 1 :(得分:-1)
一种选择是将其存储在代码中所需的表单中。因此,“id3”对象可能只是“id1”项目中的一个元素。如下所示:
"id1": {
name:"project1",
subProjects:{
"id3": { name:"project3" }
}
}
另一种选择是将每个项目存储为自己的文档,并使用MongoDB文档中的“模型树结构”数据模型之一:http://docs.mongodb.org/manual/data-modeling/