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',
)

現在、posts[x] を削除するための PHP コードを書いています。$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))));
4

1 に答える 1

15

MongoDB シェルを使用してそれを行う方法は次のとおりです。これを PHP に変換できるはずです。

プル操作は、$pull修飾子、フィールド セレクター、および値式で構成されます。

{ $pull: { fieldSelector: valueExpression } }

あなたの場合、フィールドセレクターは です。これはposts、更新する配列であるためです。値の表現は、平易な英語で、

投稿のidは「wwwwwiasdfn234oiasf」に等しい

これは に変換され{ id: "wwwwwiasdfn234oiasf" }ます。これらすべてを組み合わせると$pull、配列から目的の項目を削除する次のステートメントが得られます。

{ $pull: { posts: { id: "wwwwwiasdfn234oiasf" } } }
于 2010-10-30T16:53:16.270 に答える