Versão 2 do driver MongoDB C# requer a configuração do
IsUpsert
sinalizador nos comandos de gravação. Este exemplo fará upsert de um documento inteiro. var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } };
var result = await collection.ReplaceOneAsync(
filter: new BsonDocument("_id", 123),
options: new ReplaceOptions { IsUpsert = true },
replacement: newDoc);
Versão 1 do driver MongoDB C# implementa essa lógica dentro do
Save
comando. var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } };
collection.Save(newDoc);
O método Salvar é uma combinação de Inserir e Atualizar. Se o membro Id do documento tiver um valor, supõe-se que seja um documento existente e Save chama Update no documento (definindo o sinalizador Upsert apenas no caso de realmente ser um novo documento). Caso contrário, assume-se que é um novo documento e Save chama Insert após primeiro atribuir um valor exclusivo recém-gerado ao membro Id.
Referência:http://mongodb.github.io/mongo-csharp-driver/1.11/driver/#save-tdocument-method
Nota:No entanto, isso requer o mapeamento adequado do campo Id. Mais informações sobre isso aqui:http://mongodb.github.io/mongo-csharp-driver/1.11/serialization/#identifying-the-id-field-or-property