sql >> Base de Datos >  >> NoSQL >> MongoDB

Exposición de MongoDB ObjectIds

Versión corta:sí, use String en todas partes.

Si está de acuerdo con las anotaciones, use:

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

De lo contrario, puede usar un mapa de clase:

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

Versión larga:

Es recomendable usar algo opaco, que no esté directamente conectado a la implementación de la base de datos subyacente, en su modelo y capa de servicio tanto como sea posible (cuando sea posible).

Anteriormente, los identificadores de clave principal solían ser números grandes, que luego se asignaban a una columna de clave principal numérica en la base de datos. Sin embargo, al asignar una nueva identificación a una nueva entidad, se tuvo que hacer una verificación en la base de datos para asegurarse de tener una identificación única. Existen muchas técnicas, desde generadores de ID LO-HI, hasta columnas de incremento automático, secuencias, etc.

Con NoSQL y la necesidad de un mayor paralelismo, la mayoría de las aplicaciones ahora usan UUID o variaciones de este, porque la ID se puede generar con probabilidades razonables, será única sin tener que preguntarle a la base de datos si es realmente única, o usar secuencias o similares, que son cuellos de botella en una aplicación que escala horizontalmente.

MongoDB no es diferente y usa ObjectId que son una especie de UUID.

Estos identificadores (tanto mongo como otros) siempre se pueden representar como cadenas, generalmente una representación HEX de los bytes que componen la clave. Entonces, en su modelo use String como ids, en su capa de servicio lo mismo, en su capa de datos conviértalo a cualquier formato que sea mejor para la implementación de su base de datos subyacente, MongoDB en este caso.