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
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)
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});
vous pouvez utiliser LINQ comme suit:
await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);