1) Pokud máte sloupec s názvem Id, id or _id , ve vašem silně napsaném TDocument class (typ položky v kolekci), pak sloupec s názvem "_id" bude generován v Mongo. Vytvoří také index pro tento sloupec. Zobrazí se duplicate key error výjimka, pokud se pokoušíte vložit položku s klíčem, který již existuje.
public ObjectId Id { get; set; } použije generátor typů pro ObjectId a bude to vypadat jako _id: ObjectId("57ade20771e59f422cc652d9") .
public Guid _id { get; set; } použije generátor Guid k vytvoření něčeho jako "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .
public int Id { get; set; } , public string id { get; set; } , public byte[] _id { get; set; } budou také indexové sloupce používající výchozí hodnoty pro každý typ, pokud není uvedeno.
2) [BsonId] poskytuje flexibilitu pojmenování tohoto indexu, jak chcete. [BsonId] public Guid SmthElseOtherThanId { get; set; } a [BsonId] public string StringId { get; set; } budou indexy; public Guid SmthElseOtherThanId { get; set; } a public string StringId { get; set; } zvyklý. mongodb bude stále používat _id interně.
Stejná logika, public ObjectId SmthElseOtherThanId {get; set;} bez [BsonId] dekorace nebude sloupcem indexu.
3) [BsonRepresentation] umožňuje žonglovat s typem Mongo a interním typem .Net, pokud mezi nimi probíhá konverze .
S [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } je totožné s public ObjectId Id { get; set; } .
S [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } je však jiný. Mongo bude automaticky generovat ID objektů sám, ale budete moci používat řetězce v .net, filtrovat dotazy atd., protože existuje konverze mezi ID objektu a řetězcem.
S [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } nebo [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } selže s ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer zprávu.
Ale [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } bude v pořádku.