2012-02-09 6 views
0

私はpostal_countryを私の視点で出そうとしますが、これはerlangでどのように行われるのか分かりません。erlangビューでネストされたハッシュの値が出力されます

これは私の文書の構造である:

{ 
    ... 
    "postal_address": { 
     "postal_country": "BE" 
     ... 
    } 
} 

これは私が翻訳したいJSです:

function(doc) { 
    if (doc['ruby_class'] == 'Company' && doc['postal_address']['postal_country']) { 
    emit(doc['postal_address']['postal_country'], 1) 
    } 
} 

これは私がErlangで試したものです:

fun({Doc}) -> 
    case proplists:get_value(<<"ruby_class">>, Doc) of 
    <<"Company">> -> 
     Addr = proplists:get_value(<<"postal_address">>, Doc, null), 
     Key = proplists:get_value(<<"postal_country">>, Addr, null), 
     Emit(Key, 1); 
    _ -> 
    ok 
    end 
end. 
+0

この機能でエラーが発生しますか? Emitは束縛されていない変数のようです... – Isac

+0

_(FYI @Isac EmitはCouchDBの関数です:彼はCouchDBマップ関数を作成しています)_ – SCdF

答えて

1

あなたはhttps://stackoverflow.com/a/2422631/453605で提案されているアドレスをアンラップする必要があります:

fun({Doc}) -> 
    case proplists:get_value(<<"ruby_class">>, Doc) of 
    <<"Company">> -> 
     case proplists:get_value(<<"postal_address">>, Doc) of 
     {Address} -> 
      Country = proplists:get_value(<<"postal_country">>, Address), 
      Emit(Country, 1); 
     _ -> 
      ok 
     end; 
    _ -> 
     ok 
    end 
end. 
+0

は有望そうです。ビューの生成は '**終了理由== ** {{badmatch、null}、[{erl_eval、expr、3、[}}]}でクラッシュします。これは関連するエラーだと思います。何とかnullをチェックする必要がありますか?私には本当に役に立たないでしょう... – phoet

+0

私は 'doc ['postal_address'] == null'のためにサンプルを更新しました。 –

関連する問題