Mongo DB c#如何更新大量字段和忽略一些字段



我有一个用例,在更新我尝试UpdateOneAsync的文档时不更新某些值。UpdateOneAsync的问题是我需要设置的属性是~100并且需要忽略2个属性但是update的语法强制定义每个需要更新的属性

var filter = Builders<Employee>.Filter
.Where(m => m.EmployeeId == request.EmployeeId);
var data = Builders<Employee>.Update
.Set(m => m.FirstName, request.FirstName)
.Set(m => m.LastName, request.LastName)
.Set(m => m.Salary, request.Salary)
.Set(m => m.LastUpdateDateTime, DateTime.UtcNow)
.SetOnInsert(m => m.CreatedDateTime, DateTime.UtcNow)
.SetOnInsert(m => m.CreatedBy, request.CreatedBy);
await _collection.UpdateOneAsync(filter, data, new UpdateOptions { IsUpsert = true });

我只是想忽略创建和创建的日期时间,因为这些将只在插入时设置,并在文档中更新请求对象的所有属性。有没有更简单的方法来做到这一点。我尝试了类似的操作,但是抛出了一个序列化异常

var data = Builders<Employee>.Update
.Set(m => m, request) <-- This is what I am trying to achieve
.SetOnInsert(m => m.CreatedDateTime, DateTime.UtcNow)
.SetOnInsert(m => m.CreatedBy, request.CreatedBy);

Mongo Driver当前使用- 2.12.*

  1. $Find要更新的数据
  2. 使您的请求类型与Employee相同
  3. $Find
  4. 的数据填充您忽略的2个属性
  5. $Set全部数据

最新更新