Il n'y a aucune raison d'afficher une erreur d'index en double dans le premier cas car il essaie simplement de mettre à jour le _id
et name
champs du même enregistrement avec la même valeur.
Si vous essayez
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
vous obtiendrez une erreur, car la requête essaie de mettre à jour l'enregistrement avec un _id
différent avec un _id
existant valeur.
Dans le second cas, vous avez d'abord créé un enregistrement avec name
champ et ensuite vous essayez de mettre à jour le même nom dans un autre enregistrement, ce qui donnera une erreur en tant que name
est un index unique.
Modifier :-
Si vous essayez
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
vous donnera l'erreur, car dans ce cas, vous essayez d'insérer un enregistrement qui est déjà présent, c'est-à-dire _id
est unique et vous essayez de créer un autre enregistrement avec le même _id
valeur.