如何使用 mongocxx 驱动程序将 GUID 作为 bsoncxx::types::b_oid 附加到文档中?
How to append GUID as bsoncxx::types::b_oid to document using mongocxx driver?
我已经使用旧驱动程序完成了一些工作,现在我正在升级到新驱动程序。但我遇到了一个问题。
我正在尝试将 GUID 附加到基本文档,但在新驱动程序中只允许 12 字节长度的二进制数据。
在传统驱动程序中,它接受 16 字节数据,GUID 被转换为 16 字节。
是否可以将 GUID 转换为长度为 12 的字节数组?
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
GUID 插入代码:
void insert_guid(std::string name, const GUID& guid)
{
convertGUIDtoBinary( guid, binaryGuidData ); //Can't convert to 12 byte. It will convert to 16 byte length
bsoncxx::types::b_oid oId;
oId.value = bsoncxx::oid(binaryGuidData, 12); //How to make it 12 byte length?
bsoncxx::builder::basic::document _builder;
_builder.append(kvp(name, oId));
}
拜托,如果有人能帮助我,谢谢..
您不能将 b_oid
用于 16 字节的 GUID,因此请改用 b_binary
类型。如果您确定您的 UUID 符合 RFC-4122(每个字段中的大端)并且您想要将它们与其他二进制数据区分开来,那么您可以使用二进制子类型 k_uuid
。或者,您可以只使用二进制子类型 k_binary
。 MongoDB 无关紧要——只有当您的应用程序关心它时才重要。
我已经使用旧驱动程序完成了一些工作,现在我正在升级到新驱动程序。但我遇到了一个问题。 我正在尝试将 GUID 附加到基本文档,但在新驱动程序中只允许 12 字节长度的二进制数据。 在传统驱动程序中,它接受 16 字节数据,GUID 被转换为 16 字节。 是否可以将 GUID 转换为长度为 12 的字节数组?
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
GUID 插入代码:
void insert_guid(std::string name, const GUID& guid)
{
convertGUIDtoBinary( guid, binaryGuidData ); //Can't convert to 12 byte. It will convert to 16 byte length
bsoncxx::types::b_oid oId;
oId.value = bsoncxx::oid(binaryGuidData, 12); //How to make it 12 byte length?
bsoncxx::builder::basic::document _builder;
_builder.append(kvp(name, oId));
}
拜托,如果有人能帮助我,谢谢..
您不能将 b_oid
用于 16 字节的 GUID,因此请改用 b_binary
类型。如果您确定您的 UUID 符合 RFC-4122(每个字段中的大端)并且您想要将它们与其他二进制数据区分开来,那么您可以使用二进制子类型 k_uuid
。或者,您可以只使用二进制子类型 k_binary
。 MongoDB 无关紧要——只有当您的应用程序关心它时才重要。