MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Разлика между декорирането на свойство в C# с BsonRepresentation(BsonType.ObjectId) срещу BsonId срещу ObjectId

1) Ако имате колона с име Id, id or _id , във вашия строго въведен TDocument клас (типът на елемента в колекция), след това колона с име "_id" ще бъде генериран в Mongo. Той също така ще създаде индекс за тази колона. Получавате duplicate key error изключение, ако се опитвате да вмъкнете елемент с ключ, който вече съществува.

public ObjectId Id { get; set; } ще използва генератора на типове за ObjectId и ще изглежда така _id: ObjectId("57ade20771e59f422cc652d9") .

public Guid _id { get; set; } ще използва генератора на Guid, за да произведе нещо като "_id" : BinData(3,"s2Td7qdghkywlfMSWMPzaA==") .

public int Id { get; set; } , public string id { get; set; } , public byte[] _id { get; set; } също ще бъдат индексни колони, използващи стойностите по подразбиране за всеки тип, ако не са посочени.

2) [BsonId] ви дава гъвкавостта да наименувате този индекс по какъвто и да е начин. [BsonId] public Guid SmthElseOtherThanId { get; set; } и [BsonId] public string StringId { get; set; } ще бъдат индекси; public Guid SmthElseOtherThanId { get; set; } и public string StringId { get; set; } няма да mongodb все още ще използва _id вътрешно.

Същата логика, public ObjectId SmthElseOtherThanId {get; set;} без [BsonId] декорацията няма да бъде индексна колона.

3) [BsonRepresentation] ви позволява да жонглираш с типа Mongo срещу вътрешния тип .Net, ако има преобразуване между тях .

Имайки [BsonId] [BsonRepresentation(BsonType.ObjectId)] public ObjectId Id { get; set; } е идентичен с public ObjectId Id { get; set; } .

Имащ [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } е различно обаче. Mongo автоматично ще генерира идентификатори на обекти сам, но вие ще можете да използвате низове в .net, филтриращи заявки и т.н., тъй като има преобразуване между идентификатор на обект и низ.

Имащ [BsonId] [BsonRepresentation(BsonType.ObjectId)] public byte[] Id { get; set; } или [BsonId] [BsonRepresentation(BsonType.ObjectId)] public int Id { get; set; } ще се провали с ObjectId not a valid representation for a ByteArraySerializer / Int32Serializer съобщение.

Но [BsonId] [BsonRepresentation(BsonType.String)] public int StringId { get; set; } ще бъде добре.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изключение, удостоверяващо MongoCredential и некатегоризирано Mongo Db Exception

  2. Как да изключите едно конкретно поле от колекция в Mongoose?

  3. $lookup връща празен масив

  4. mongodb групирайте стойности по множество полета

  5. Разбиране на издръжливостта и безопасността при запис в MongoDB