2011-08-11 5 views
2

J'ai un petit problème, j'espère que vous pouvez m'aider. J'ai la prochaine structure de tableau dans MongoDB:Insérer des données dans le tableau interne dans MongoDB

{ 
"_id":ObjectId("4e43cf96e7c7914b87d2e0ff"), 
"list" :[ 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000002"), 
    "user_name" : "login", 
    "comments" : [ ] //insert here new data 
    }, 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000003"), 
    "user_name" : "login", 
    "comments" : [ ] 
    } 
] 
} 

Et je veux insérer de nouvelles données aux commentaires par « list.id ». Mais j'essaie comme ça:

$post_id = "4e43cf96e62883ee06000002"; 
$this->connection->user->feed->update(
    array ('list.id' => new MongoId($post_id)), 
    array ('$push' => array ('list'=>array('comments'=>$data))) 
) 

Mais ce code créer un nouveau champ dans la structure, mais pas ajouter des données sur le terrain 'commentaires':

{ 
"_id":ObjectId("4e43cf96e7c7914b87d2e0ff"), 
"list" :[ 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000002"), 
    "user_name" : "login", 
    "comments" : [ ] //insert here new data 
    },  
    { 
    "id" : ObjectId("4e43cf96e62883ee06000003"), 
    "user_name" : "login", 
    "comments" : [ ] 
    },    
    { 
    "comments" : { //added new field 
     //there is my data 
    } 
] 
} 

Aussi j'ai essayé:

$this->connection->user->feed->update(
    array ('list.id' => new MongoId($post_id)), 
    array ('$push' => array ('list.comments'=>$data)) 
); 

Mais rien.

Répondre

10

Cela fonctionne bien dans la console mongo :)

db.yar.update({"list.id":ObjectId("4e43cf96e62883ee06000002")}, {"$addToSet":{"list.$.comments":"my cool comment"}}); 
+0

oui, vous avez raison;) merci beaucoup !! Et pouvez-vous me dire s'il vous plaît ce que char "$" signifie dans "liste. $. Commentaires"? Ou donnez-moi une référence? Merci! –

+1

[Lien vers la documentation] (http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator) – Igorekk

1

Utilisez le modificateur $ addToSet, car les commentaires sont un champ de tableau not.

+0

Je change 'push $' à '$ addToSet', mais que le code a même comportement que par 'push $' (ajouter du nouveau champ, je montre par exemple en question) –

+0

et aussi j'utilise '$ push' pour ajouter des données au tableau 'list', et cela fonctionne avec '$ push'. –

+0

ou j'ai eu une erreur dans mon code? –

Questions connexes