2013-07-19 2 views
3

Я пытаюсь удалить элемент подмассива из документа mongo. Мой документ (запись) выглядит примерно так:удалить элементы из субмассивного документа mongo

{ 
    "_id" : 1, 
    ..., 
    "team" : { 
     "players" : [{ 
      "name" : "A B", 
      "birthday" : new Date("11/11/1995") 
      }, { 
      "name" : "A C", 
      "birthday" : new Date("4/4/1991") 
      }], 
     "matches" : [{ 
      "against" : "Team B", 
      "matchDay" : new Date("11/16/2012 10:00:00") 
      }] 
     } 
} 

Теперь я хочу удалить игрока «A B» из своего документа. Я попытался это:

$result = $collection->update(
    array('_id' => 1), 
    array('$pull' => array('team.players.name' => 'A B')) 
); 

В результате, как представляется, ОК

(
    [updatedExisting] => 1 
    [n] => 1 
    [connectionId] => 8 
    [err] => 
    [ok] => 1 
) 

но игрок все еще существует в документе.

Спасибо!

ответ

6

Ваш объект обновления должен быть таким:

{ 
    "$pull": { 
     "team.players": { 
      name: "A C" 
     } 
    } 
} 

Так что в PHP будет:

$result = $collection->update(
    array('_id' => 1), 
    array('$pull' => 
     array('team.players' => array('name' = > 'A B')) 
    ) 
); 
+0

Благодаря человеку! Оно работает! – Larry

Смежные вопросы