MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Różnica między dekorowaniem właściwości w C# za pomocą BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId

1) Jeśli masz kolumnę o nazwie Id, id or _id , w silnie wpisanym TDocument klasa (typ elementu w kolekcji), a następnie kolumna o nazwie "_id" zostanie wygenerowany w Mongo. Stworzy również indeks dla tej kolumny. Otrzymujesz duplicate key error wyjątek, jeśli próbujesz wstawić element z kluczem, który już istnieje.

public ObjectId Id { get; set; } użyje generatora typów dla ObjectId i będzie wyglądać jak _id: ObjectId("57ade20771e59f422cc652d9") .

public Guid _id { get; set; } użyje generatora Guid do wytworzenia czegoś takiego jak "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .

public int Id { get; set; } , public string id { get; set; } , public byte[] _id { get; set; } będą również indeksowane kolumny przy użyciu wartości domyślnych dla każdego typu, jeśli nie zostaną określone.

2) [BsonId] daje Ci elastyczność w nazywaniu tego indeksu w dowolny sposób. [BsonId] public Guid SmthElseOtherThanId { get; set; } i [BsonId] public string StringId { get; set; } będą indeksy; public Guid SmthElseOtherThanId { get; set; } i public string StringId { get; set; } przyzwyczajenie. mongodb nadal będzie używać _id wewnętrznie.

Ta sama logika, public ObjectId SmthElseOtherThanId {get; set;} bez [BsonId] dekoracja nie będzie kolumną indeksu.

3) [BsonRepresentation] pozwala żonglować między typem Mongo a wewnętrznym typem .Net, jeśli jest między nimi konwersja .

Mając [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } jest identyczny z public ObjectId Id { get; set; } .

Mając [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } jest jednak inna. Mongo sam automatycznie wygeneruje identyfikatory obiektów, jednak będziesz mógł używać ciągów w .net, filtrować zapytania itp., ponieważ zachodzi konwersja między identyfikatorem obiektu a ciągiem.

Mając [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } lub [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } nie powiedzie się, ponieważ ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer wiadomość.

Ale [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } będzie dobrze.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z mongodb errno:61 Połączenie odrzucone

  2. MongoDB $mod

  3. Jak utworzyć zrzut MongoDB mojej bazy danych?

  4. Konwertuj MongoDB BsonDocument na prawidłowy JSON w C#

  5. C# MongoDB.Driver GetServer już nie istnieje, co teraz?