Erreur lors de la mise à jour d'un tableau à Mongo
Question
J'ai créé un tableau dans mon document Mongo, il semble donc un peu comme ce qui suit:
{ "_id" : ObjectId("4f59e19d0b7aab2903000004"),
"details" : { x:1, y:2 }
}
Je tente alors de pousser une nouvelle valeur au tableau, faisant:
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{$push: {"details": {"z":3}}});
Cependant, je reçois l'erreur:
Cannot apply $push/$pushAll modifier to non-array
Il semble que je sèle le seul moyen de pouvoir ajouter les informations au tableau, consiste à utiliser la notation de points pour l'ajouter, par exemple
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{"details.z": 3});
Cela semble fonctionner, mais lorsque j'ai une éventail d'environ 30 valeurs, cela semble un peu fastidieux.
Juste pour la clarté, j'utilise le cadre PHP du lithium, pas seulement l'entrer manuellement, je pourrais donc boucler à travers un tableau pour préparer les "détails".à chaque clé, mais je ne pense pas que cela devrait être nécessaire.Y a-t-il quelque chose qui me manque pourquoi il ne poussera pas les valeurs dans le tableau?
(mon code de lithium était comme suit :)
User::update(array('$push'=>array('details'=>array('z'=>3))), array('_id'=>$id))
merci,
dan
La solution
"Détails" est un document intégré, pas un tableau.Si c'était un tableau, cela ressemblerait à ceci (notez le [] indiquant un tableau):
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 } ] }
Si vous faites alors une poussée $:
db.users.update({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")},
{$push : {"details": {"z":3}}})
Vous obtenez le résultat attendu:
db.users.find({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")})
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 }, { "z" : 3 } ] }
En gros, vous essayez d'appuyer sur un document, pas un tableau.