2017-08-09 37 views
0

我已經做了一些與遺留驅動程序的工作,現在我正在升級到新的。但是我遇到了一個問題。 我試圖將GUID附加到基本文檔,但在新驅動程序中只允許使用12個字節長度的二進制數據。 在傳統驅動程序中,它接受16個字節的數據,並將GUID轉換爲16個字節。 是否可以將GUID轉換爲長度爲12的字節數組?如何將GUID作爲bsoncxx :: types :: b_oid添加到使用mongocxx驅動程序的文檔中?

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

您不能使用b_oid爲一個16字節的GUID,所以使用改爲b_binary。如果您確定您的UUID符合RFC-4122(每個字段內的大端),並且您希望將它們與其他二進制數據區分開來,則可以使用二進制子類型k_uuid。或者,您可以使用二進制子類型k_binary。這對MongoDB無關緊要 - 只有在您的應用程序關心重要時才重要。

+0

bArray.sub_type = bsoncxx :: binary_sub_type :: k_uuid_deprecated; 作品在我的情況 – snb

相關問題