我生成這樣的對象ID:mongodb_app:gen_objectid()
這顯然返回一個ObjectId類型。如何使用mongodb-erlang和bson-erlang將objectid轉換爲二進制子類型3(uuid)?
我需要有一個BinType(3,...),因爲我們不存儲objectids而是二進制子類型3 id。
有誰知道如何轉換?
我生成這樣的對象ID:mongodb_app:gen_objectid()
這顯然返回一個ObjectId類型。如何使用mongodb-erlang和bson-erlang將objectid轉換爲二進制子類型3(uuid)?
我需要有一個BinType(3,...),因爲我們不存儲objectids而是二進制子類型3 id。
有誰知道如何轉換?
想出如何解決它,我使用uuid generator from avtobiff用於生成UUID:
generate_objectid_subtype3() ->
{bin, uuid, uuid:uuid4()}.
%%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(< < 「51F5BE99118735B187000001」 >>)。
出認沽:
{< < 81,245,190,153,17,135,53,177,135,0,0,1 >>}
objectid_to_binary_string({< < 81,245,190,153,17,135,53,177,135,0,0,1 >>})。
出認沽:
< <「51F5BE99118735B187000001」 >>
你可以在這裏添加你自己的答案,並在2天后,你甚至可以接受它 - 它的SO方式的一部分 - 而且意味着人們再看到這一個作爲「未回答」 –