【问题标题】:How to convert objectid to binary subtype 3 (uuid) with mongodb-erlang and bson-erlang?如何使用 mongodb-erlang 和 bson-erlang 将 objectid 转换为二进制子类型 3 (uuid)?
【发布时间】:2013-10-07 18:47:28
【问题描述】:

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

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

有人知道如何转换吗?

【问题讨论】:

  • 您可以在此处添加自己的答案,2 天后您甚至可以接受它——这是 SO 方式的一部分——这意味着人们也不再将其视为“未回答”

标签: mongodb erlang bson


【解决方案1】:
%%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(>).
输出:
{>}

objectid_to_binary_string({>}).
输出:
>

【讨论】:

    【解决方案2】:

    想出了如何解决它,我使用uuid generator from avtobiff 来生成 UUID:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2011-04-29
      • 2012-03-14
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      相关资源
      最近更新 更多