sql >> Databáze >  >> NoSQL >> MongoDB

Rozdíl mezi zdobením vlastnosti v C# pomocí BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId

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.




  1. Java Mongodb číselný dotaz

  2. Nejlepší způsob, jak uložit klíče Redis

  3. MongoDB find()

  4. MongoDB $strLenCP