MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

upsert un champ dans un sous-document dans un tableau par index dans MongoDB

Vous souhaitez utiliser la update commande sur votre collection comme suit (exemple):

db.collection.update(
    { "my_array.title" : "title_one" },
    { $inc : { "my_array.$.click_number" : 1 } }
);

Que vient-il de se passer ?

Sur le premier paramètre de update vous définissez une query pour correspondre aux documents que vous souhaitez mettre à jour. Nous recherchons une propriété nommée title à l'intérieur du tableau appelé my_array . Vous pouvez faire correspondre body ou email bien sûr en modifiant la notation par points en :"my_array.email" .

Le deuxième paramètre définit la mise à jour, la modification à appliquer. Nous avons un $inc opérateur pour incrémenter les champs, que nous utilisons dans cette instruction. La query sélectionne un document avec l'élément de tableau correspondant. Vous pouvez accéder à cet élément de tableau correspondant avec le $ notation. Le "my_array.$" sélectionne l'élément de tableau correspondant, qui a un title , email et body . Si vous essayez de donner une valeur à un champ non existant, MongoDB le fera pour vous. Si le champ n'existe pas, $inc définit le champ sur le montant spécifié. Le $inc l'opérateur accepte les montants incrémentiels positifs et négatifs.

En savoir plus sur la commande de mise à jour.

Autre exemple :

db.collection.update(
    { _id : "john", "my_array.email" : "email" },
    { $inc : { "my_array.$.click_number" : 1 } }
);