如何使用mongocxx驱动程序将GUID作为bsoncxx :: types :: b_oid附加到文档?

时间:2017-08-09 02:20:54

标签: mongodb c++11 bson mongo-cxx-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));

}

如果有人可以帮助我,请谢谢..

1 个答案:

答案 0 :(得分:1)

您不能将b_oid用于16字节的GUID,因此请改用b_binary类型。如果您确定您的UUID符合RFC-4122(每个字段中的big-endian),并且您希望将它们与其他二进制数据区分开来,那么您可以使用二进制子类型k_uuid。或者,您可以使用二进制子类型k_binary。对MongoDB来说无关紧要 - 只有你的应用程序关心它才重要。