PHP / Mongo: как обновить вложенные данные? - PullRequest
2 голосов
/ 11 октября 2010

Я играю с Mongo уже около недели и до сих пор не могу понять, как изменить вложенные массивы в Mongo с помощью php.

Итак, вот пример документа ...

array (
  '_id' => new MongoId("4cb30f560107ae9813000000"),
  'email' => 'mo@maurice-campobasso.com',
  'firstname' => 'Maurice',
  'lastname' => 'Campobasso',
  'password' => 'GOD',
  'productions' => 
  array (
    0 => 
    array (
      'title' => 'a',
      'date' => '1286811330.899',
    ),
    1 => 
    array (
      'title' => 'b',
      'date' => '1286811341.183',
    ),
    2 => 
    array (
      'title' => 'c',
      'date' => '1286811350.267',
    ),
    3 => 
    array (
      'title' => 'd',
      'date' => '1286811356.05',
    ),
  ),
)

Что я не хочу делать, так это удалять массив внутри массива productions, но я не могу понять, как это сделать. Я играл с 'update (' $ pull '=> ... etc)', но не смог заставить его работать.

Ответы [ 2 ]

4 голосов
/ 11 октября 2010

ОК, есть несколько способов сделать это.В вашем случае, я бы сделал что-то вроде

mymongoobject.update( $unset : { "productions.2" : 1 } }

Это, в основном, говорит о том, что нужно отключить элемент ".2" производства.Некоторые документы здесь .

Теперь $ pull также должно работать, но это немного сложнее, потому что "productions" на самом деле является массивом массивов (или объектов с подобъектами).Таким образом, вам нужно точно сопоставить массивы:

mymongoobject.update( $pull : { "productions" : {'title':'d', 'date':'1286811356.05'} }

В приведенном выше примере unset, вероятно, самый простой вариант (хотя он оставит «дыру» в массиве)

1 голос
/ 11 октября 2010

Это на самом деле очень просто, в отличие от традиционных SQL-программ, вы просто изменяете все данные и возвращаете их.

...