2013-10-04 117 views
0

在我的Mongo DB文檔中,我曾經有一個嵌套數組,我已經轉換爲嵌套文檔。因此,舉例來說,現在我的文件看起來是這樣的:如何從平面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

我能想出以下解決方案:

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

一個選項會將其存儲在您需要的代碼中。因此,「id3」對象可以是「id1」項目中的一個元素。像下面這樣:

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

另一種選擇是存儲每一個項目,因爲它是自己的文檔,並使用「模型樹結構」數據模型MongoDB的文檔之一:http://docs.mongodb.org/manual/data-modeling/