web-dev-qa-db-fra.com

MongoDB C # Driver 2.0 - Document de mise à jour

Je suis actuellement en train de mettre à niveau mon code vers MongoDB C # driver 2.0 et j'ai des problèmes pour mettre à jour le code pour mettre à jour les documents.

en utilisant l'ancienne version, j'ai pu faire quelque chose comme ceci:

MyType myObject; // passed in 
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);

J'ai du mal à trouver un moyen de le faire dans la nouvelle version. J'ai trouvé quelques exemples de mise à jour de champs uniques comme

var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var update = Builders<MyType>.Update.Set(s => s.Description, description);
var result = await collection.UpdateOneAsync(filter, update);

Je voudrais mettre à jour tous les champs comme je le faisais dans l'ancienne version avec la méthode Save.

Des idées ?

Merci beaucoup

29

Je pense que vous recherchez ReplaceOneAsync():

MyType myObject; // passed in 
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
26
mnemosyn

Pour ajouter à la réponse de mnemosyn, alors qu'un simple ReplaceOneAsync met à jour un document, il n'est pas équivalent à Save car Save insérerait également le document s'il n'en trouvait pas un mettre à jour.

Pour obtenir le même comportement avec ReplaceOneAsync, vous devez utiliser le paramètre options:

MyType myObject; 
var result = await collection.ReplaceOneAsync(
    item => item.Id == id, 
    myObject, 
    new UpdateOptions {IsUpsert = true});
25
i3arnon

vous pouvez utiliser LINQ comme suit:

await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);
3
reda bakr