38

現在、コードを 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 を使用して古いバージョンで行っていたように、すべてのフィールドを更新したいと思います。

何か案は ?

どうもありがとう

4

4 に答える 4

41

あなたが探していると思いますReplaceOneAsync()

MyType myObject; // passed in 
var filter = Builders<MyType>.Filter.Eq(s => s.Id, id);
var result = await collection.ReplaceOneAsync(filter, myObject)
于 2015-05-15T12:11:17.690 に答える
30

mnemosyn の回答に追加するには、単純にドキュメントを更新しますが、更新するドキュメントが見つからなかった場合にドキュメントを挿入するのと同等ReplaceOneAsyncではありません。SaveSave

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

MyType myObject; 
var result = await collection.ReplaceOneAsync(
    item => item.Id == id, 
    myObject, 
    new UpdateOptions {IsUpsert = true});
于 2015-05-15T17:34:14.793 に答える
6

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

await context.collection.ReplaceOneAsync(b=> b.Id == item.Id,item);
于 2015-12-22T16:56:27.350 に答える