2010-10-30 7 views
3

J'ai un objet mongodb comme suit:élément MongoDB tableau de traction d'une collection

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

Maintenant, je suis en train d'écrire un code PHP pour supprimer les messages [x]. J'essaie d'utiliser $ pull pour supprimer l'élément de tableau.

J'ai un 'id' 'wwwwwiasdfn234oiasf' (tableau élément 3) et je veux enlever cet élément entier, ne laissant que 6 éléments dans le tableau 'posts'.

J'ai essayé de googler et de chercher la documentation en vain ... Je n'arrive toujours pas à comprendre la syntaxe de mongodb. Je fais tout ça en PHP, mais n'importe quelle langue fera que je devrais être capable de faire la traduction.

Un grand merci à l'avance,

Solution (en PHP):

$uname=whatever 
$id=whatever 
$mongo=new Mongo(); 
$walls=$mongo->people->walls; 
$walls->update(array('uname'=>$uname),array('$pull'=>array('posts'=>array('id'=>$id)))); 
+0

attention à ce type de '$ vous id' passez à MongoDB. Ce qui suit pourrait vous sauver quelques fois: '$ id = new MongoId ($ id);' –

Répondre

14

Voici comment le faire en utilisant le shell MongoDB. Vous devriez être capable de le traduire en PHP.

Une opération de traction est constituée de l'agent modificateur $pull, un sélecteur de champ et une expression de valeur .

{ $pull: { fieldSelector: valueExpression } } 

Dans votre cas, le sélecteur de champ est posts, puisque c'est le tableau que vous souhaitez mettre à jour. L'expression de valeur, en anglais simple, est

où le id du poste égal à "wwwwwiasdfn234oiasf"

Cela se traduit par { id: "wwwwwiasdfn234oiasf" }. Si nous combinons tout cela, vous aurez la déclaration suivante $pull, qui supprimera l'élément souhaité du tableau:

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

Légende. Ça marche maintenant! Merci beaucoup!!! Post édité. – Eamorr

+1

Bonne explication! – Ms01

Questions connexes