Couchdb, version 0.10.0, à l'aide de vues d'erlang natifs.
J'ai un document simple du formulaire: p> et un document de conception JavaScript de base: < / p> qui émet: p> Je cherche à construire une vue erlang qui fait la même chose. La meilleure tentative jusqu'à présent est la suivante: p> qui émet: p> la question est - comment puis-je obtenir ces valeurs comme tuples, au lieu de des tableaux? Je n'imagine pas que je puisse (ou voudriez-le) utiliser des enregistrements, mais utiliser des atomes dans un tuple ne semble pas fonctionner. P> échoue avec l'erreur suivante: p> pensées? Je sais que Erlang craint pour ce type de chose spécifique (accès nommé) et que je peux le faire par convention (ID au premier poste, nom d'utilisateur suivant, nom vrai), mais qui rend le code côté client plutôt laid. P > p>
3 Réponses :
Si vous aimez Caractéristiques expérimentales em> (qui fonctionnent toujours ...), vous voudrez peut-être jeter un oeil à erlang J'ai trouvé extrêmement utile pour créer une sorte d'enregistrement dynamique em> pour Erlang. P>
L'objet JSON dans Erlang Lingua c'est une proplamiste enveloppée dans un tuple. P>
Ce n'est pas joli, mais très efficace :) p>
Pour obtenir une idée de votre choix, vous pouvez jouer avec le JSON LIB qui est expédié avec CouchDB: P>
// dans les versions ultérieures de Couchdb, c'est {"foo": "bar", "baz": 1} code> est
{[{"foo" >>, << "bar" >> }, {<< "baz" >>, 1}]} code> p>
Couch_util: json_util: json_decode (<< "{\" foo \ ": \" bar \ "}" >> li> li>
Ejson: décodage () code> p>
Parfait! Cela a vraiment aidé :)
Lors du décodage JSON qui a des touches imbriquées, il faut-il échapper à la {avec un \ {aussi?
pour test_suite_reports em> bd, qui a tests em> champ: J'ai écrit cela pour obtenir le nom et l'état: P > 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.
Je ne connais pas les détails de Couchdb, donc je n'ai aucune idée de la fonction
émettant code> fait référence à, mais apparemment json_encode utilisé dans CouchDB nécessite une liste comme entrée. Voir: svn.apache.org/ Viewvc / Couchdb / Trunk / Src / Couchdb / ...
EMIT est la fonction qui renvoie des données de la fonction de carte à réduire plus tard. Il a un équivalent dans la version JS et je présume qu'ils sont tous deux intégrés au mécanisme de vue CouchDB. Merci pour le lien. Cela explique pourquoi cela ne fonctionne pas. Maintenant, pour savoir comment travailler autour de ça :)
Je sais ce que EMIT est en général; Je ne connais tout simplement pas la fonction renvoyée par la variable code> émettant code> dans votre code collé.
Pourriez-vous également indiquer comment procéder à cela en utilisant des postes?