Atualize com
upsert=true
pode ser usado para executar uma "inserção ou atualização" atômica (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
). Por exemplo, se quisermos garantir que um documento na coleção Front com
url
específico for inserido exatamente uma vez, poderíamos executar algo como:db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
As operações em um único documento no MongoDB são sempre atômicas. Se você fizer atualizações que abrangem vários documentos, nenhuma atomicidade será garantida. Nesses casos, você pode se perguntar:eu realmente preciso que as operações sejam atômicas? Se a resposta for não, você provavelmente encontrará seu caminho para trabalhar com dados potencialmente inconsistentes. Se a resposta for sim e você quiser continuar com o MongoDB, confira o padrão de design em Commits de duas fases .