sql >> Database teknologi >  >> NoSQL >> MongoDB

Forskellen mellem at dekorere en ejendom i C# med BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId

1) Hvis du har en kolonne ved navn Id, id eller _id , i dit stærkt indtastede TDocument klasse (genstandstypen i en samling), derefter en kolonne med navnet "_id" vil blive genereret i Mongo. Det vil også oprette et indeks for den kolonne. Du får en dublet nøglefejl undtagelse, hvis du forsøger at indsætte et element med en nøgle, der allerede eksisterer.

public ObjectId Id { get; sæt; } vil bruge typegeneratoren til ObjectId og det vil se ud som _id:ObjectId("57ade20771e59f422cc652d9") .

offentlig vejledning _id { get; sæt; } vil bruge guide-generatoren til at producere smth som "_id" :BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .

public int Id { get; sæt; } , offentlig streng-id { get; sæt; } , offentlig byte[] _id { get; sæt; } vil også være indekskolonner, der bruger standardindstillingerne for hver type, hvis det ikke er angivet.

2) [BsonId] giver dig fleksibiliteten til at navngive det indeks, som du vil. [BsonId] public Guide SmthElseOtherThanId { get; sæt; } og [BsonId] public string StringId { get; sæt; } vil være indekser; offentlig vejledning SmthElseOtherThanId { get; sæt; } og offentlig streng StringId { get; sæt; } vil ikke. mongodb vil stadig bruge _id internt.

Samme logik, public ObjectId SmthElseOtherThanId {get; sæt;} uden [BsonId] dekoration vil ikke være en indekskolonne.

3) [Bson-repræsentation] lader dig jonglere med Mongo-typen kontra den interne .Net-type, hvis der er en konvertering mellem dem .

At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; sæt; } er identisk med public ObjectId Id { get; sæt; } .

At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; sæt; } er dog anderledes. Mongo vil automatisk generere objekt-id'er af sig selv, men du vil være i stand til at bruge strenge i .net, filterforespørgsler osv., fordi der er en konvertering mellem objekt-id og streng.

At have [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; sæt; } eller [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; sæt; } mislykkes med et ObjectId er ikke en gyldig repræsentation for en ByteArraySerializer / Int32Serializer besked.

Men [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; sæt; } vil være fint.




  1. Dokumentdatabaser:Redundante data, referencer osv. (Specifikt MongoDB)

  2. hvordan man importerer en .csv-datafil til Redis-databasen

  3. Skal du aktivere MongoDB-journalisering?

  4. Er Redis bare en cache?