У меня есть объект mongodb следующим образом:
array ( '_id' => new MongoId("4cc97fb0247ae8747ec5fefb"), 'posts' => array ( 0 => array ( 'comment' => 'Eamorr', 'fromUname' => 'Eamorr', 'time' => 1288273840, 'UTC' => '2010-10-28T14:50:40+01:00', 'ip' => '127.0.0.1', 'id' => '123lasdfiqwoei28asdf', ), 1 => array ( 'comment' => 'Hello', 'fromUname' => 'Eamorr', 'time' => 1288277023, 'UTC' => '2010-10-28T15:43:43+01:00', 'ip' => '127.0.0.1', 'id' => 'qopqwier982389qwfa', ), 2 => array ( 'comment' => 'Hello', 'fromUname' => 'Anonymous', 'time' => 1288283506, 'UTC' => '2010-10-28T17:31:46+01:00', 'ip' => '127.0.0.1', 'id' => 'ioqwoeias892398wrf', ), ///// //Want to remove element 3: ///// 3 => array ( 'comment' => 'asdfasadf', 'fromUname' => 'Anonymous', 'time' => 1288283864, 'UTC' => '2010-10-28T17:37:44+01:00', 'ip' => '127.0.0.1', 'id' => 'wwwwwiasdfn234oiasf', ), 4 => array ( 'comment' => 'asdfasdfasdf', 'fromUname' => 'Anonymous', 'time' => 1288284076, 'UTC' => '2010-10-28T17:41:16+01:00', 'ip' => '127.0.0.1', 'id' => '290qwefoiqweproiqwerpq', ), 5 => array ( 'comment' => 'ASDF', 'fromUname' => 'Eamorr', 'time' => 1288284331, 'UTC' => '2010-10-28T17:45:31+01:00', 'ip' => '127.0.0.1', 'id' => 'eioqw8923892hasdf', ), 6 => array ( 'comment' => 'ASDF2', 'fromUname' => 'Eamorr', 'time' => 1288284370, 'UTC' => '2010-10-28T17:46:10+01:00', 'ip' => '127.0.0.1', 'id' => '23oaiofsaij234', ), ), 'uname' => 'Eamorr', )
Теперь я пишу код PHP для удаления сообщений [x]. Я пытаюсь использовать $ pull для удаления элемента массива.
У меня есть 'id' 'wwwwwiasdfn234oiasf' (элемент массива 3), и я хочу удалить весь этот массив, оставив всего 6 элементов в массиве 'posts'.
Я пробовал поиск в Интернете и смотрел документацию безрезультатно … Я все еще не могу получить поддержку синтаксиса mongodb.
Я делаю все это на PHP, но на любом языке я смогу сделать перевод.
Спасибо заранее,
Решение (в PHP):
$uname=whatever $id=whatever $mongo=new Mongo(); $walls=$mongo->people->walls; $walls->update(array('uname'=>$uname),array('$pull'=>array('posts'=>array('id'=>$id))));
,$uname=whatever $id=whatever $mongo=new Mongo(); $walls=$mongo->people->walls; $walls->update(array('uname'=>$uname),array('$pull'=>array('posts'=>array('id'=>$id))));
Вот как это сделать, используя оболочку MongoDB. Вы должны перевести его на PHP.
Операция pull состоит из модификатора $pull
, селектора полей и выражения значения .
{ $pull: { fieldSelector: valueExpression } }
В вашем случае поле селектор – это posts
, так как это массив, который вы хотите обновить. Выражение значения на простом английском языке
где
id
сообщения равен «wwwwwiasdfn234oiasf»
Это означает { id: "wwwwwiasdfn234oiasf" }
. Если мы объединим все это, вы получите следующий оператор $pull
, который удалит нужный элемент из массива:
{ $pull: { posts: { id: "wwwwwiasdfn234oiasf" } } }