如何使用mongodb-erlang和bson-erlang将objectid转换为二进制子类型3(uuid)?

时间:2012-04-30 12:03:55

标签: mongodb erlang bson

我生成这样的对象ID:mongodb_app:gen_objectid() 这显然返回ObjectId类型。

我需要一个BinType(3,...)因为我们不存储objectids而是二进制子类型3 id。

有谁知道如何转换这个?

2 个答案:

答案 0 :(得分:3)

%%This method is used to generate ObjectId from binary string.
binary_string_to_objectid(BinaryString) ->
    binary_string_to_objectid(BinaryString, []).

binary_string_to_objectid(<<>>, Result) ->
    {list_to_binary(lists:reverse(Result))};
binary_string_to_objectid(<<BS:2/binary, Bin/binary>>, Result) ->
    binary_string_to_objectid(Bin, [erlang:binary_to_integer(BS, 16)|Result]).

%%This method is used to generate binary string from objectid.
objectid_to_binary_string({Id}) ->
    objectid_to_binary_string(Id, []).

objectid_to_binary_string(<<>>, Result) ->
    list_to_binary(lists:reverse(Result));
objectid_to_binary_string(<<Hex:8, Bin/binary>>, Result) ->
    StringList1 = erlang:integer_to_list(Hex, 16),
    StringList2 = case erlang:length(StringList1) of
        1 ->
            ["0"|StringList1];
        _ ->
            StringList1
    end,
    objectid_to_binary_string(Bin, [StringList2|Result]).

测试示例:

    binary_string_to_objectid(小于;&LT;&#34; 51F5BE99118735B187000001&#34;&GT;&GT)
。 出局:
    {&LT;&LT; 81,245,190,153,17,135,53,177,135,0,0,1&GT;&GT;}

    objectid_to_binary_string({&LT;&LT; 81,245,190,153,17,135,53,177,135,0,0,1&GT;&GT;})。
出局:
&LT;&LT;&#34; 51F5BE99118735B187000001&#34;&GT;&GT;

答案 1 :(得分:0)

想出如何修复它,我使用uuid generator from avtobiff生成UUID:

generate_objectid_subtype3() ->
    {bin, uuid, uuid:uuid4()}.