2016-12-06 6 views
0

mongoDBを使用したRESTベースのサービスにはカウボーイを使用しています。 - いずれかのアイデアを持っていることができます(MongoDBの値、すなわち「_id」)JSONへの変換エラーBSON値を取得、MongoDBのドキュメントを取得し、JSONに変換し、方法、サービスmongoDBを使用したRESTベースのサービス用のカウボーイ。エラーBSON値をJSON変換に変換する

{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}; 

エラーを休ませるプッシュします

Error: Ranch listener my_http_listener, connection process <0.192.0>, stream 1 had its request process <0.193.0> exit with reason badarg and stacktrace [{jsx_parser,value,4,[{file,"src/jsx_parser.erl"},{line,152}]},{user_handler,init,2,[{file,"src/user_handler.erl"},{line,19}]},{cowboy_handler,execute,2,[{file,"src/cowboy_handler.erl"},{line,39}]},{cowboy_stream_h,execute,3,[{file,"src/cowboy_stream_h.erl"},{line,172}]},{cowboy_stream_h,proc_lib_hack,3,[{file,"src/cowboy_stream_h.erl"},{line,157}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]

答えて

1

mongoクライアントは、{key1, value1, key2, value2, key3, value3}のようなbsonドキュメントを返します。 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} 
関連する問題