Libbson ofrece una forma sencilla de generar ObjectIDs. Puede utilizarse con un solo subproceso o con múltiples subprocesos, según sus necesidades.
El La estructurabson_oid_t representa una ObjectID En MongoDB, es un identificador de 96bits.
Composición
4 bytes: La marca de tiempo de UNIX en formato big-endian.
5 bytes : Un número aleatorio.
3 bytes: un contador monótono de 24bit que se incrementa desde
rand()en big-endian.
Ordenar ID de objetos
La forma típica de ordenar en C es qsort() usando. Por lo tanto, Libbson proporciona una qsort() función de devolución de llamada compatible con llamada bson_oid_compare. Esta función less than 1 devuelve, greater than 1 o 0 según la igualdad de dos estructuras bson_oid_t.
Comparación de identificadores de objetos
Si simplemente desea comparar dos estructuras bson_oid_t para verificar su igualdad, utilice bson_oid_equal.
Generando
Para generar un bson_oid_t, puede utilizar lo siguiente.
bson_oid_t oid; bson_oid_init (&oid, NULL);
Análisis de cadenas de ObjectID
También puede analizar una cadena que contenga un bson_oid_t. La cadena de entrada DEBE tener 24 caracteres o más.
bson_oid_t oid; bson_oid_init_from_string (&oid, "123456789012345678901234");
bson_oid_t oid; bson_oid_init_from_string_unsafe (&oid, "123456789012345678901234");
Hashing de ObjectIDs
Si necesita almacenar elementos en una tabla hash, puede usar bson_oid_t como clave. Libbson proporciona una función hash para este propósito. Se basa en el hash DJB.
unsigned hash; hash = bson_oid_hash (oid);
Obtención del tiempo de creación del ObjectID
Puede obtener fácilmente la hora en que se generó un bson_oid_t utilizando bson_oid_get_time_t.
time_t t; t = bson_oid_get_time_t (oid); printf ("The OID was generated at %u\n", (unsigned) t);