MongoDB извлекает элемент массива из коллекции - PullRequest
3 голосов
/ 30 октября 2010

У меня есть объект 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))));

1 Ответ

15 голосов
/ 30 октября 2010

Вот как это сделать, используя оболочку MongoDB.Вы должны быть в состоянии перевести его на PHP.

Операция извлечения состоит из модификатора $pull, селектора полей и выражения значения .

{ $pull: { fieldSelector: valueExpression } }

В вашем случае селектор поля - posts, так как это массив, который вы хотите обновить.Выражение значения на простом английском языке:

, где id сообщения равно "wwwwwiasdfn234oiasf"

Это означает { id: "wwwwwiasdfn234oiasf" }.Если мы объединим все это, вы получите следующий оператор $pull, который удалит нужный элемент из массива:

{ $pull: { posts: { id: "wwwwwiasdfn234oiasf" } } }
...