Вопрос

Я играю с 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',
    ),
  ),
)

Что я не хочу делать, это удалить массив внутри массива по производству продуктов, но я не могу отработать, как. Я играл с «Обновлением (« $ PLAT »=> ... и т. Д.)« Но я не смог сделать это работать.

Это было полезно?

Решение

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

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

Это в основном говорят, что означает, что «.2» элемент производств. Некоторый Документы здесь.

Теперь $ Pult должна также работать, но это немного жестче, потому что «Productions» на самом деле является массивом массивов (или объектов с подличиями). Так что вам придется точно соответствовать массивам:

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

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

Другие советы

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

$cursor = $mongo->yourDB->yourCollection->findOne("_id",4cb30f560107ae9813000000);
//let's remove last item on productions
array_splice($cursor["productions"],2);
//and update the mongo document
echo $mongo->yourDB->yourCollection->update($cursor);
//it echoes 1 if successful

Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top