Как и в других ответах здесь, идентификаторы назначаются на стороне клиента. Что-то, что вы можете сделать, это создать соглашение о значении по умолчанию, которое генерирует новый идентификатор во время вставки, если он еще не установлен.
public class DefaultValueConvention : MongoDB.Bson.Serialization.Conventions.IDefaultValueConvention
{
public object GetDefaultValue(MemberInfo memberInfo)
{
var type = memberInfo.MemberType == MemberTypes.Property
? ((PropertyInfo) memberInfo).PropertyType
: ((FieldInfo) memberInfo).FieldType;
if (type.IsSubclassOf(typeof(ObjectId)))
return ObjectId.GenerateNewId();
else
return null;
}
}
И настройте драйвер для использования этого соглашения:
var profile = new ConventionProfile();
profile.SetDefaultValueConvention(new DefaultValueConvention());
BsonClassMap.RegisterConventions(profile, x => x.FullName.StartsWith("ConsoleApplication"));
Теперь вы можете создать объект и сохранить его в 2 строки:
var animal = new Animal {Name = "Monkey", PercentDeviationFromHumans = 2.01};
db["animals"].Save(animal);
На самом деле, с самым последним драйвером вам даже не нужно устанавливать соглашение о значениях по умолчанию, оно уже имеет такое поведение OOTB. В любом случае, в монго недостаточно используются условные обозначения.