2012-05-02 1 views
1

...MongoDB + PHP:spcecificキーを使って項目を配列にプッシュする方法は?私は、コレクション内の配列の最後に新しいエントリをプッシュするには、以下の例のコードを使用しています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。私がやりたいことは、このようなキーとしてストアYearWeekNumberある

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

...

[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) 
); 
関連する問題