Ковбой для основанных на 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}
Другие вопросы по тегам