MongoDB .NET在upsert上没有生成_id

我正在尝试使用.NET驱动程序将文档插入MongoDB 2.4.4。 似乎不会在upserts上自动生成_id ,尽管它在普通插入上正确生成了_id 。 如何让驱动程序正确生成_id

这是一个展示问题的小例子。

 public class MongoObject { [BsonId(IdGenerator = typeof(StringObjectIdGenerator))] [BsonRepresentation(BsonType.ObjectId)] public string MongoID { get; set; } public int Index { get; set; } } var obj = new MongoObject() { Index = 1 }; //This inserts the document, but with a _id set to Null _collection.Update(Query.EQ("Index", BsonValue.Create(1)), Update.Replace(obj), UpdateFlags.Upsert, new WriteConcern() { Journal = true }); //This inserts the document with the expected autogenerated _id //_collection.Insert(obj); 

当然,我在发布问题后立即找到答案。 从这个答案 ,解决方案是向ID添加[BsonIgnoreIfDefault]属性。 在问题的例子中它将是:

 public class MongoObject { [BsonId(IdGenerator = typeof(StringObjectIdGenerator))] [BsonRepresentation(BsonType.ObjectId)] [BsonIgnoreIfDefault] // <--- this is what was missing public string MongoID { get; set; } public int Index { get; set; } }