現在、コードをMongoDB C#ドライバー2.0にアップグレードしていますが、コードをアップグレードしてドキュメントを更新する際に問題が発生しています。
古いバージョンを使用すると、次のようなことができました:
MyType myObject; // passed in
var collection = _database.GetCollection<MyType>("myTypes");
var result = collection.Save(myObject);
新しいバージョンでこれを行う方法を見つけるのに苦労しています。私は次のような単一のフィールドを更新するいくつかの例を見つけました
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);
旧バージョンで行っていたSaveメソッドを使用して、すべてのフィールドを更新します。
何か案は ?
どうもありがとう
ReplaceOneAsync()
を探していると思います:
MyType myObject; // passed in
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
Mnemosynの答えに追加するために、単純なReplaceOneAsync
はドキュメントを更新しますが、Save
はドキュメントを更新しませんが、更新するドキュメントが見つからなかった場合はSave
も挿入します。
ReplaceOneAsync
で同じ動作を実現するには、optionsパラメーターを使用する必要があります。
MyType myObject;
var result = await collection.ReplaceOneAsync(
item => item.Id == id,
myObject,
new UpdateOptions {IsUpsert = true});
次のようにLINQを使用できます。
await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);