我使用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}]}]
答案 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}