9
votes

Émettre des tuples de erlang vues dans Couchdb

Couchdb, version 0.10.0, à l'aide de vues d'erlang natifs.

J'ai un document simple du formulaire: xxx

et un document de conception JavaScript de base: < / p> xxx

qui émet: xxx

Je cherche à construire une vue erlang qui fait la même chose. La meilleure tentative jusqu'à présent est la suivante: xxx

qui émet: xxx

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. xxx

échoue avec l'erreur suivante: xxx

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.


4 commentaires

Je ne connais pas les détails de Couchdb, donc je n'ai aucune idée de la fonction émettant 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 émettant dans votre code collé.


Pourriez-vous également indiquer comment procéder à cela en utilisant des postes?


3 Réponses :


0
votes

Si vous aimez Caractéristiques expérimentales (qui fonctionnent toujours ...), vous voudrez peut-être jeter un oeil à erlang EXPRACS .

J'ai trouvé extrêmement utile pour créer une sorte d'enregistrement dynamique pour Erlang.


0 commentaires

13
votes

L'objet JSON {"foo": "bar", "baz": 1} est {[{"foo" >>, << "bar" >> }, {<< "baz" >>, 1}]}

dans Erlang Lingua c'est une proplamiste enveloppée dans un tuple.

Ce n'est pas joli, mais très efficace :)

Pour obtenir une idée de votre choix, vous pouvez jouer avec le JSON LIB qui est expédié avec CouchDB:

  1. démarrer Couchdb avec le -i Drapeau (interactif)
  2. sur la coque erlang résultante, type: Couch_util: json_util: json_decode (<< "{\" foo \ ": \" bar \ "}" >>
  3. profit

    // dans les versions ultérieures de Couchdb, c'est Ejson: décodage ()


2 commentaires

Parfait! Cela a vraiment aidé :)


Lors du décodage JSON qui a des touches imbriquées, il faut-il échapper à la {avec un \ {aussi?



3
votes

pour test_suite_reports em> bd, qui a tests em> champ: xxx pré>

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.


0 commentaires