Libbson 提供了一种生成 ObjectID 的简单方法。 它可以根据您的要求以单线程或多线程方式使用。
bson_oid_t ObjectID结构表示MongoDB中的 。它是一个 96 位标识符。
组合
4字节:大端格式的 UNIX 时间戳。
5字节:一个随机数。
3字节: 24位单调计数器以大端字节序从
rand()递增。
对 ObjectID 进行排序
在C中,典型的排序方法是使用 qsort()。因此,Libbson 提供了一个名为 bson_oid_compare 的 qsort() 兼容回调函数。它根据两个bson_oid_t结构的相等性返回 less than 1、greater than 1 或 0。
比较对象 ID
如果只想比较两个bson_oid_t结构是否相等,请使用bson_oid_equal.
正在生成
要生成bson_oid_t,您可以使用以下内容。
bson_oid_t oid; bson_oid_init (&oid, NULL);
解析ObjectId字符串
您还可以解析包含 bson_oid_t 的字符串。输入字符串的长度必须为 24 个字符或更长。
bson_oid_t oid; bson_oid_init_from_string (&oid, "123456789012345678901234");
bson_oid_t oid; bson_oid_init_from_string_unsafe (&oid, "123456789012345678901234");
对 ObjectID 进行哈希处理
如果需要在哈希表中存储项目,则可能需要使用 bson_oid_t 作为键。Libbson 为此目的提供了一个哈希函数。它基于 DJB 哈希。
unsigned hash; hash = bson_oid_hash (oid);
正在获取ObjectId创建时间
您可以使用 bson_oid_get_time_t 轻松获取 bson_oid_t 的生成时间。
time_t t; t = bson_oid_get_time_t (oid); printf ("The OID was generated at %u\n", (unsigned) t);