3

私は次のようにオブジェクト ID を生成します。mongodb_app:gen_objectid() これは明らかに ObjectId タイプを返します。

オブジェクト ID ではなくバイナリ サブタイプ 3 ID を格納するため、BinType(3, ...) が必要です。

これを変換する方法を知っている人はいますか?

4

2 に答える 2

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">>

于 2013-10-07T10:47:28.713 に答える
0

それを修正する方法を考え出した、私はUUID を生成する avtobiff から uuid ジェネレーターを使用します。

generate_objectid_subtype3() ->
    {bin, uuid, uuid:uuid4()}.
于 2012-07-19T05:44:20.803 に答える