Não há razão para mostrar o erro de índice duplicado no primeiro caso, pois está apenas tentando atualizar o
_id
e name
campos do mesmo registro com o mesmo valor. Se você vai tentar
db.foo.update({ _id: '1098'}, { _id: 'doe123', name: 'John Doe'}, { upsert: true});
você receberá um erro, pois a consulta está tentando atualizar o registro com diferentes
_id
com alguns _id
existentes valor. No segundo caso, você criou um registro primeiro com
name
campo e então você está tentando atualizar o mesmo nome em outro registro, que dará erro como name
é índice único. Editar:-
Se você está tentando
db.foo.insert({ _id: 'doe123', name: 'John Doe'});
lhe dará o erro, pois neste caso você está tentando inserir um registro que já está presente, ou seja,
_id
é único e você está tentando criar mais um registro com o mesmo _id
valor.