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.