web-dev-qa-db-ja.com

mongodbドキュメントの特定のフィールドを更新する

C#ドライバーを使用して小さなプロジェクトでMongoDbを使用していましたが、今ではドキュメントの更新にこだわっています。フィールドの更新方法を理解しよう[〜#〜] avg [〜#〜](int)

ここに私のコードがあります:

_IMongoCollection<Student> studentCollection = db.GetCollection<Student>("studentV1");

Student updatedStudent = new Student() { AVG = 100, FirstName = "Shmulik" });

studentCollection.UpdateOne(
        o=>o.FirstName == student.FirstName,
            **<What should I write here?>**);
_

メソッドReplaceOne(updatedStudent)?のような特定のフィールドを更新する簡単でクリーンな方法があります

13
moshe770

これを試してください。& 詳細

IMongoCollection<Student> studentCollection = db.GetCollection<Student>("studentV1");

Student updatedStudent = new Student() { AVG = 100, FirstName = "Shmulik" });

var update = Update<Student>.
Set(s => s.AVG, "500").
Set(s => s.FirstName, "New Name");
5
Darshak

さて、コード全体に文字列を書くことなくそれを行う簡単な方法があることがわかりました(プロパティ名):

var updateDef = Builders<Student>.Update.Set(o => o.AVG, student.AVG);

studentCollection.UpdateOne(o => o.FirstName == student.FirstName, updateDef);

見つけるのにそれほど時間がかかるとは知りませんでしたが(+2日)、最終的に この答え を見つけました:

var filter = Builders<TempAgenda>.Filter.Eq(x => x.AgendaId, agendaId);
var update = Builders<TempAgenda>.Update.Set(x => x.Items.Single(p => p.Id.Equals(itemId)).Title, title);
var result = _collection.UpdateOneAsync(filter, update).Result;

そして今、それははるかに簡単です。

34
moshe770