2012-04-30 59 views
3

我生成這樣的對象ID:mongodb_app:gen_objectid() 這顯然返回一個ObjectId類型。如何使用mongodb-erlang和bson-erlang將objectid轉換爲二進制子類型3(uuid)?

我需要有一個BinType(3,...),因爲我們不存儲objectids而是二進制子類型3 id。

有誰知道如何轉換?

+1

你可以在這裏添加你自己的答案,並在2天后,你甚至可以接受它 - 它的SO方式的一部分 - 而且意味着人們再看到這一個作爲「未回答」 –

回答

0

想出如何解決它,我使用uuid generator from avtobiff用於生成UUID:

generate_objectid_subtype3() -> 
    {bin, uuid, uuid:uuid4()}. 
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(< < 「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」 >>

相關問題