2012-02-25 14 views
1

permet de dire que nous avons un document comme celui-ciDB Mongo: Pour modifier un champ à un tableau

{ 
    "_id" : "1234", 
    "Data" : { 
     "Name" : "Pythagoras", 
     "Like" : "Math" 
} 

Et nous avons changé sur l'esprit et que vous voulez pousser plus de choses à Data-> Comme il ressemble;

{ 
    "_id" : "1234", 
    "Data" : { 
     "Name" : "Pythagoras", 
     "Like" : ["Math", "Science"] 
} 

Tous les opérateurs atomiques comme push $, $ pushAll et addToSet $ ​​fonctionne juste au moment où Data-> Comme est déjà un tableau.

J'utilise le pilote php. Dans cet exemple, il n'y a pas de signification à ne pas définir Data-> Like à un tableau au début mais cela ne fonctionne pas comme ça dans mon code; (

J'espère que vous pouvez m'aider et désolé pour mon mauvais anglais;) Merci!

Répondre

1

Vous devrez parcourir tous vos documents et modifier la valeur en tableau. Par exemple, vous pouvez le faire avec:

 
$m = new Mongo(); 
$c = $m->yourdbname->yourcollectionname; 

foreach ($c->find() as $r) 
{ 
    if (!is_array($r['Data']['Like'])) 
    { 
     $c->update(array('_id' => $r['_id']), array('$set' => array('data.like' => array($r['data']['like'])))); 
    } 
} 
+0

Merci, je ne veux pas le faire avec tous mes documents mais je pense que je peux me débrouiller pour le réparer comme je le veux. J'espérais un opérateur qui vient d'ajouter les données; – Mattias

Questions connexes