sql >> Databasteknik >  >> NoSQL >> MongoDB

Skillnaden mellan att dekorera en fastighet i C# med BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId

1) Om du har en kolumn som heter Id, id or _id , i ditt starkt skrivna TDocument klass (objekttypen i en samling), sedan en kolumn med namnet "_id" kommer att genereras i Mongo. Det kommer också att skapa ett index för den kolumnen. Du får ett duplicate key error undantag om du försöker infoga ett objekt med en nyckel som redan finns.

public ObjectId Id { get; set; } kommer att använda typgeneratorn för ObjectId och det kommer att se ut som _id: ObjectId("57ade20771e59f422cc652d9") .

public Guid _id { get; set; } kommer att använda Guid-generatorn för att producera smth som "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .

public int Id { get; set; } , public string id { get; set; } , public byte[] _id { get; set; } kommer också att vara indexkolumner som använder standardinställningarna för varje typ om det inte anges.

2) [BsonId] ger dig flexibiliteten att namnge det indexet som du vill. [BsonId] public Guid SmthElseOtherThanId { get; set; } och [BsonId] public string StringId { get; set; } kommer att vara index; public Guid SmthElseOtherThanId { get; set; } och public string StringId { get; set; } vana. mongodb kommer fortfarande att använda _id internt.

Samma logik, public ObjectId SmthElseOtherThanId {get; set;} utan [BsonId] dekoration kommer inte att vara en indexkolumn.

3) [BsonRepresentation] låter dig jonglera med Mongo-typen kontra den interna .Net-typen, om det finns en konvertering mellan dem .

Att ha [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } är identisk med public ObjectId Id { get; set; } .

Att ha [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } är dock annorlunda. Mongo kommer att automatiskt generera objekt-id själv, men du kommer att kunna använda strängar i .net, filterfrågor etc., eftersom det finns en konvertering mellan objekt-id och sträng.

Att ha [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } eller [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } kommer att misslyckas med ett ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer meddelande.

Men [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } kommer att bli bra.




  1. ImportError:Ingen modul med namnet redis

  2. MongoDB updateMany()

  3. Realtidsapplikationsnybörjare - Node.JS + Redis eller RabbitMQ -> klient/server hur?

  4. Next Generation Data Warehousing hos Santander UK