从MongoDB集合中删除数组元素

3

我有一个如下的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代码来删除posts[x]。我试图使用$pull来删除数组元素。
我有一个'id' 'wwwwwiasdfn234oiasf'(数组元素3),我想删除这个整个数组元素,只留下'posts'数组中的6个元素。
我尝试过谷歌和查找文档,但仍然无法掌握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))));

在向MongoDB传递$id时要小心。以下代码可以帮助你避免一些错误:$id = new MongoId($id); - user578597
1个回答

15

以下是使用 MongoDB shell 实现的方法。您应该能够将其转换为PHP。

一个 pull 操作由 $pull 修改器、一个字段选择器和一个值表达式组成。

{ $pull: { fieldSelector: valueExpression } }

在你的情况下,字段选择器是posts,因为这是你想要更新的数组。换言之,该值表达式是:

其中帖子的id等于"wwwwwiasdfn234oiasf"

这相当于{ id: "wwwwwiasdfn234oiasf" }。如果我们将所有这些组合起来,你将得到以下$pull语句,它将从数组中删除所需的项:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接