2017-08-09 14 views
0

私は従来のドライバでいくつかの作業をしましたが、今は新しいものにアップグレードしています。しかし、私は問題を抱えています。 基本的なドキュメントにGUIDを追加しようとしていますが、新しいドライバでは12バイト長のバイナリデータしか使用できません。 レガシードライバでは、16バイトのデータを受け取り、GUIDは16バイトに変換されました。 GUIDを長さ12のバイト配列に変換できますか?mongocxxドライバを使用して文書にbsoncxx :: types :: b_oidとしてGUIDを追加する方法は?

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)); 

} 

してください、誰かが私を助けることができれば、おかげで..あなたは、16バイトのGUIDのためb_oidを使用するので、使用することはできません

答えて

1

代わりにb_binaryタイプです。 UUIDがRFC 4122(各フィールド内のビッグエンディアン)に準拠していて、他のバイナリデータと区別したい場合は、バイナリサブタイプk_uuidを使用できます。または、バイナリサブタイプk_binaryを使用することもできます。 MongoDBには関係ありません。あなたのアプリケーションが気にすることができればそれは重要です。

+0

bArray.sub_type = bsoncxx :: binary_sub_type :: k_uuid_deprecated; 私の場合は動作します – snb

関連する問題