У меня есть Erlang Couch DB, который представляет объект JSON как так:Erlang - Условно Omit свойство из Couch DB Посмотреть
fun({Doc}) ->
Name = couch_util:get_value(<<\"name\">>, Doc),
Value = couch_util:get_value(<<\"Value\">>, Doc),
Geocode = couch_util:get_value(<<\"geocode\">>, Doc),
Emit(
Name,
{[
{ <<\"value\">>,Value },
{ <<\"geocode\">>, Geocode }
]}
)
end.
Проблема в том, что все документы в этой точке зрения не имеют " геокода ". В случае отсутствия геокода, я бы предпочел не показывать его. В псевдокоде, я бы по существу хотел бы, чтобы это ...
Emit(
Name,
{[
{ <<\"value\">>,Value },
Geocode != undefined ? { <<\"geocode\">>, Geocode } : null
]}
);
Я подозреваю, что это не будет так легко сделать это в Erlang?
До сих пор мое лучшее решение заключается в следующем:
fun({Doc}) ->
Name = couch_util:get_value(<<\"name\">>, Doc),
Value = couch_util:get_value(<<\"Value\">>, Doc),
Geocode = couch_util:get_value(<<\"geocode\">>, Doc),
% I think 'couch_util:get_value' returns the atom undefined, if the value doesn't exist.
Undefined = undefined,
if Geocode /= Undefined ->
Emit(
Name,
{[
{ <<\"value\">>, Value },
{ <<\"geocode\">>, Geocode }
]}
);
true -> Emit(Name, {[ { <<\"value\">>, Value } ]})
end;
end.
Довольно уверен, что будет один или два синтаксических ошибок там ... пожалуйста, не стесняйтесь указывать их! Но что еще более важно, существует ли более эффективный способ условно удалить значение «геокода» из пролистника/представления?