プロジェクトでMongoDB.Netドライバーを使用しています。 MongoDBに保存されているオブジェクトのすべてのプロパティを更新したいと思います。ドキュメントでは、更新は次のように示されています。
var filter = Builders<BsonDocument>.Filter.Eq("i", 10);
var update = Builders<BsonDocument>.Update.Set("i", 110);
await collection.UpdateOneAsync(filter, update);
ただし、すべてのプロパティに対してSet
メソッドを呼び出したくありません。これは、多くのプロパティがあり、将来的にはさらに多くなる可能性があるためです。
MongoDB .Netドライバーを使用してオブジェクト全体を更新するにはどうすればよいですか?
var update = new BsonDocument("$set", new BsonDocument(entityType.GetProperties().Where(p => p.Name != "Id").Select(p => new KeyValuePair<string, object>(p.Name, entityType.GetProperty(p.Name).GetValue(task, null)))));
var options = new UpdateOptions();
collection.UpdateOne<MyTask>(item => item.Name == "cheque", update, options);
このコードはリフレクションを使用して、指定されたオブジェクトのすべてのプロパティを含めます
updateステートメントに、すべてのプロパティを手動で追加する必要はありません。例外を回避するために、IDがupdateステートメントから明示的に除外されていることがわかります。
BsonDocument全体を更新する場合は、BsonDocumentからUpdateDefinitionへの暗黙的な変換があります。
https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver/UpdateDefinition.cs
var doc = new BsonDocument() { .... }
UpdateDefinition<BsonDocument> update = doc;