Ковбой для основанных на REST сервисов, использующих mongoDB. Получение значения ошибки BSON в преобразование JSON
Я использую ковбой для основанных на REST сервисов, использующих mongoDB. Получение значения ошибки BSON в преобразование JSON (т. Е. '_Id' в значении mongodb) может у кого-нибудь есть идея, как извлечь документы 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};
Ошибка -
Ошибка: слушатель ранчо my_http_listener, процесс соединения <0.192.0>, поток 1 имеет свой процесс запроса <0.193.0>, выход с причиной badarg и stacktrace [{jsx_parser,value,4,[{file,"src/jsx_parser.erl"},{линия,152}]},{user_handler, первонач,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 ответ
Монго-клиент возвращает документы 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}