我正在尝试使用c#mongo驱动程序在.net core 2中批量转发集合。我遇到的问题是_id字段总是插入为null。
这是代码:
public async Task UpsertEvents(IEnumerable<Event> events)
{
if(events.Count()>0){
List<ReplaceOneModel<Event>> requests = new List<ReplaceOneModel<Event>>();
foreach (var ev in events)
{
var filter = new FilterDefinitionBuilder<Event>().Where(m => m.Id == ev.Id);
var request = new ReplaceOneModel<Event>(filter,ev);
request.IsUpsert = true;
requests.Add(request);
}
await _context.Events.BulkWriteAsync(requests);
}
}
对象:
public class Event
{
[BsonIgnoreIfDefault]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
}
还有更多领域,但它们在这里并不相关。
任何想法为什么它为id插入null?普通插入正确生成ID。
使用UpdateOneModel并列出更新中的所有属性。
List<UpdateOneModel<Event>> requests = new List<UpdateOneModel<Event>>();
var update = Builders<Event>.Update.Set("field", "value");
var request = new UpdateOneModel<Event>(filter,update);
阅读here
解释为什么upsert with replacement在id中插入一个null值。但是,[BsonIgnoreIfDefault]应该适合你。