0
Je voudrais mettre à jour un champ sans perdre les autres champs de la collection du script Perl.Commande de mise à jour MongoDB Perl
par exemple, j'ai cette collection:
{
"userid": 1234,
"username": "tester",
"password": "*****",
"fullname": "For Test Only",
"emails" :[
{ "email": "[email protected]", "active": true },
{ "email": "[email protected]", "active": true }
]
}
Et je voudrais changer à ceci:
{
"userid": 1234
"username": "tester",
"password": "*****",
"fullname": "For Test Only",
"emails" :[
{ "email": "[email protected]", "active": false},
{ "email": "[email protected]", "active": true }
]
}
Quand j'ai essayé de le changer de mon script Perl utilisant ceci:
$update_result = $users->update_one(
{ 'userid' => $doc->{'userid'}},
{ '$set' => { 'emails.[0].email.active' => false }},
{ 'upsert' => 1}
);
J'ai obtenu le résultat suivant qui n'est PAS attendu:
{
"userid": 1234
"username": "tester",
"password": "*****",
"fullname": "For Test Only",
"emails" :[
{ "active": false},
{ "email": "[email protected]", "active": true }
]
}
L'email disparaît !! . Une idée pourquoi ne garde pas l'email?
Merci.
Votre ligne 'de set' de $ est erroné - vous avez une seule citation ballants, et je suppose que vous devez avoir une clé pour la cartographie de valeur, alors que vous semblez avoir une valeur à la cartographie booléenne? Juste une supposition .... ça fait un moment .... – LeeGee
Je ne pense pas, c'est sur la bonne ligne. – koul
il ressemble à une citation unique de fermeture est manquant ici. sinon, cela devrait fonctionner comme ça. ''emails. [0] .email.active' => false' – Ossip