2012-05-02 30 views
1

在MongoDB中的PHP我使用下面的示例代码推新的项目到一个集合里的数组结束...MongoDB + PHP:如何使用特定键将项目推送到数组?

$data = array(
     "domain"=>"superduperyoyo.com", 
     "number"=>123, 
     "week"=>5, 
     "year"=>2012 
); 
$db->domains->save(
     array('someid' => $someid), 
     array('$push' => array('data' => $data)) 
); 

这将返回象0,1,2,3键.. .. ie。

[someid] => somesupercoolid123 
[data] => Array 
    (
     [0] => Array 
      (
       [domain] => superduperyoyo.com 
       [number] => 123 
       [week] => 5 
       [year] => 2012 
      ) 
     [1] => Array(...) 
     [2] => Array(...) 
    ) 

我想要做的是存储YearWeekNumber因为像这样的关键...

[someid] => somesupercoolid123 
    [data] => Array 
     (
      [201205123] => Array 
       (
        [domain] => superduperyoyo.com 
        [number] => 123 
        [week] => 5 
        [year] => 2012 
       ) 
      [201206123] => Array(...) 
      [201207123] => Array(...) 
     ) 

你如何保存/更新与新条目沿着钥匙?我假设你不能使用$ push。你只是使用.save或.update,但你如何通过密钥?

回答

2

你会使用$set做到这一点:

$data = array(
     "domain"=>"superduperyoyo.com", 
     "number"=>123, 
     "week"=>5, 
     "year"=>2012 
); 
$db->domains->update(
     array('someid' => $someid), 
     array('$set' => array('data' => array(201205123 => $data))) 
); 

我然而,并非建议这样做。最好使用此“201205123”值设置另一个键,否则您无法对此值执行范围查询或设置索引。

+0

我刚开始dabling与蒙戈和我尝试不同的模式。我会索引“数字”,“星期”,“年份”...关键是只需要明确提出一个单独的记录,并且也没有重复。设置/保存将更新,而不是再次插入。 –

1
$data = array(
     "domain"=>"superduperyoyo.com", 
     "number"=>123, 
     "week"=>5, 
     "year"=>2012 
); 
$update = array(
     '$push' => array('data.201205123' => $data) 
); 
相关问题