2013-04-16 5 views
0

comment mettre à jour un champ dans un document si le champ existe déjà sinon mettre à jour la valeur du champ? $ set met à jour correctement les documents sur lesquels le champ existe déjà. juste trouvé beaucoup d'astuces comment insérer un nouveau champ dans une collection entière, mais comment résoudre ce problème sur la base de documents?Mettre à jour ou insérer dans MongoDB

Cordialement, Chris

+1

Vous semblez demander quelque chose de redondant - si le champ existe, comment mettre à jour un champ? Sinon, s'il n'existe pas, comment mettre à jour la valeur du champ? Vous utilisez simplement $ set de toute façon, peu importe si le champ existe déjà dans le document ou non. –

+0

OK, ça marche! Voici l'exemple pour ppl avec le même problème (je cours le Moped Ruby Driver): 'irb> users.find.one => {" username "=>" kamatei "," _id "=>" a407ebb3d89abd380ddda074cf03b9e4 " } ' Ce que je besoin est: ' { "nom d'utilisateur" => "kamatei", "âge" => "26", "_id" => "a407ebb3d89abd380ddda074cf03b9e4"} ' Mise à jour via $ set: 'users.find (_id: "a407ebb3d89abd380ddda074cf03b9e4"). mise à jour (: $ set => {age: 26})' ... se termine par '{ "_id"=> "a407ebb3d89abd380ddda074cf03b9e4", "âge"= > 26, "nom d'utilisateur" => "kamatei"} ' Merci beaucoup pour votre aide! – ctp

+0

vous pourriez vouloir accepter la réponse ci-dessous qui résume ceci. –

Répondre

3

$set ajoutera le ou les champs spécifiés s'ils n'existent pas dans ce document ou remplaceront la valeur existante du ou des champs spécifiés s'ils existent déjà.

2

Utilisez le drapeau upsert dans votre déclaration de mise à jour.

+1

drapeau signalant indique s'il faut créer le document s'il n'y a pas de correspondance à mettre à jour. sorte de sans rapport avec la question initiale. –

Questions connexes