Enregistrer contre insérer :
Dans vos exemples donnés, le comportement est essentiellement le même.
save
se comporte différemment s'il est passé avec un paramètre "_id".
Pour enregistrer, si le document contient _id
, il upsert interrogeant la collection sur le _id
champ, sinon, il sera inséré.
Si un document n'existe pas avec la valeur _id spécifiée, la méthode save() effectue une insertion avec les champs spécifiés dans le document.
Si un document existe avec la valeur _id spécifiée, la méthode save() effectue une mise à jour, en remplaçant tous les champs de l'enregistrement existant par les champs du document.
Enregistrer ou mettre à jour :
update
modifie un document existant correspondant à vos paramètres de requête. S'il n'y a pas de document correspondant, c'est alors que upsert
vient en image.
upsert : false
:Rien ne se passe lorsqu'aucun document de ce type n'existeupsert : true
:Un nouveau document est créé avec un contenu égal aux paramètres de requête et aux paramètres de mise à jour
save
:N'autorise aucun paramètre de requête. si _id
existe et il existe un document correspondant avec le même _id
, il le remplace. Lorsqu'aucun _id n'est spécifié/aucun document correspondant, il insère le document en tant que nouveau.