Emit Tuples From Erlang Views In CouchDB

前端 未结 3 1998
一个人的身影
一个人的身影 2020-12-31 11:40

CouchDB, version 0.10.0, using native erlang views.

I have a simple document of the form:

{
   \"_id\": \"user-1\",
   \"_rev\": \"1-9ccf63b66b62d15d         


        
相关标签:
3条回答
  • 2020-12-31 12:23

    The JSON object {"foo":"bar","baz":1} is {[{<<"foo">>,<<"bar">>},{<<"baz">>,1}]}

    In Erlang lingua it is a proplist wrapped in a tuple.

    It's not pretty, but very efficient :)

    To get a feel for it you can play with the JSON lib that ships with CouchDB:

    1. Start CouchDB with the -i (interactive) flag
    2. On the resulting erlang shell, type: couch_util:json_decode(<<"{\"foo\":\"bar\"}">>).
    3. Profit

    // in later versions of CouchDB, this is ejson:decode()

    0 讨论(0)
  • 2020-12-31 12:34

    If you like experimental features (that still work...), you might want to have a look to Erlang exprecs.

    I found it extremely helpful in creating a sort of dynamic records for Erlang.

    0 讨论(0)
  • 2020-12-31 12:37

    For test_suite_reports bd, that has tests field:

    [
       {
           "name": "basics",
           "status": "success",
           "duration": 21795
       },
       {
           "name": "all_docs",
           "status": "success",
           "duration": 385
       } ...
    

    I have wrote this to get name and status:

    fun({Doc}) ->
      Name = fun(L) ->  proplists:get_value(<<"name">>, L, null) end,
      Status = fun(L) -> proplists:get_value(<<"status">>, L, null) end,
      Tests = proplists:get_value(<<"tests">>, Doc, null),
      lists:foreach(fun({L}) -> Emit(Name(L), Status(L)) end, Tests)
    end.
    
    0 讨论(0)
提交回复
热议问题