使用mongoDB的基于REST的服务的牛仔。获取错误BSON值到JSON转换

时间:2016-12-06 03:51:17

标签: json mongodb erlang bson cowboy

我使用mongoDB将cowboy用于基于REST的服务。获取错误BSON值到JSON转换(即mongodb值中的'_id')任何人都有想法,如何获取mongoDB文档并转换为JSON并推送到Rest服务

{ok, Connection} = mongo_config:connect(),
    Collection = <<"user">>,
    Selection = {},
    Userdata = mc_worker_api:find(Connection, Collection, Selection),
    Result = mc_cursor:rest(Userdata),
    mc_cursor:close(Userdata),
    io:format(" users data ~p ~n", [Result]),
    Re = jsx:encode(Result),
    Req = cowboy_req:reply(200, #{
        <<"content-type">> => <<"text/plain">>
    }, Re, Req0),
    {ok, Req, State};

错误 -

  

错误:Ranch侦听器my_http_listener,连接过程&lt; 0.192.0&gt;,   流1具有其请求过程&lt; 0.193.0&gt;退出,理由是badarg和   堆栈跟踪   [{jsx_parser,值,4,[{文件, “SRC / jsx_parser.erl”},{线,152}]},{user_handler时,init,2,[{文件, “SRC / user_handler.erl”},{线,19}]},{cowboy_handler,执行,2,[{文件, “SRC / cowboy_handler.erl”},{线,39}]},{cowboy_stream_h,执行,3,[{文件,“SRC / cowboy_stream_h .erl “},{线,172}]},{cowboy_stream_h,proc_lib_hack,3,[{文件,” SRC / cowboy_stream_h.erl“},{线,157}]},{proc_lib,init_p_do_apply,3,[{文件, “proc_lib.erl”},{线,247}]}]

1 个答案:

答案 0 :(得分:1)

mongo客户端返回bson文档,看起来像{key1, value1, key2, value2, key3, value3}。要生成JSON,jsx:encode()需要以[{key1, value1}, {key2, value2}, {key3, value3}]等列表形式或#{key1 => value1, key2 => value2, key3 => value3}之类的地图形式输入。换句话说,您无法获取mongo客户端的输出并将其直接传递给jsx。您必须先进行一些轻量级数据转换。像

这样的东西
to_map([]) ->
  #{}; 
to_map([K, V | Rest]) -> 
  M = to_map(Rest), 
  M#{K => V}.

然后你可以:

> Bson = {key1, value1, key2, value2, key3, value3}.
> to_map(tuple_to_list(Bson)).
#{key1 => value1,key2 => value2,key3 => value3}