web-dev-qa-db-ja.com

MongoDB C#Driver 2.0-ドキュメントの更新

現在、コードを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メソッドを使用して、すべてのフィールドを更新します。

何か案は ?

どうもありがとう

29

ReplaceOneAsync()を探していると思います:

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

Mnemosynの答えに追加するために、単純なReplaceOneAsyncはドキュメントを更新しますが、Saveはドキュメントを更新しませんが、更新するドキュメントが見つからなかった場合はSaveも挿入します。

ReplaceOneAsyncで同じ動作を実現するには、optionsパラメーターを使用する必要があります。

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

次のようにLINQを使用できます。

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