MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Exposition des ObjectIds MongoDB

Version courte :oui, utilisez String partout.

Si vous êtes d'accord avec les annotations, utilisez :

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

Sinon vous pouvez utiliser un class map :

BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
 {
  cm.AutoMap();
  cm.SetIdMember(cm.GetMemberMap(x => x.Id)
    .SetIdGenerator(StringObjectIdGenerator.Instance));
 }
);

Version longue :

Il est conseillé d'utiliser quelque chose d'opaque, qui n'est pas directement connecté à l'implémentation de la base de données sous-jacente, dans votre modèle et votre couche de service autant que possible (si possible).

Auparavant, les identifiants de clé primaire étaient généralement de grands nombres, qui étaient ensuite mappés à une colonne de clé primaire numérique dans la base de données. Cependant, lors de l'attribution d'un nouvel identifiant à une nouvelle entité, une vérification de la base de données devait être effectuée pour s'assurer d'avoir un identifiant unique. De nombreuses techniques existent, des générateurs d'identifiants LO-HI, aux colonnes auto_increment, aux séquences, etc.

Avec NoSQL et le besoin de plus de parallélisme, la plupart des applications utilisent maintenant des UUID ou des variantes de celui-ci, car l'ID peut être généré avec des probabilités raisonnables, il sera unique sans avoir à demander à la base de données s'il est vraiment unique, ou utiliser des séquences ou similaires, qui sont des goulots d'étranglement dans une application qui évolue horizontalement.

MongoDB ne fait aucune différence et utilise des ObjectId qui sont une sorte d'UUID.

Ces identifiants (mongo et autres) peuvent toujours être représentés sous forme de chaînes, généralement une représentation HEX des octets composant la clé. Ainsi, dans votre modèle, utilisez String comme identifiants, dans votre couche de service de la même manière, dans votre couche de données, convertissez-le dans le format qui convient le mieux à votre implémentation de base de données sous-jacente, MongoDB dans ce cas.