9
votes

Trouver des entités avec des attributs manquants dans Dateomic

Si j'ai le suivant DaTomic base de données:

[:find ?n ?a ?l
 :where [?n :age ?a]
        [?n :likes ?l]]


0 commentaires

3 Réponses :


6
votes

récupérer un ensemble d'entités qui peuvent ou non avoir des attributs particuliers affirmés sont analogues à une jointure gauche dans une base de données relationnelle.

L'approche de DaTomic est de faire deux étapes: première requête pour les entités, puis naviguez de là pour obtenir les valeurs d'attribut ou nil si l'attribut n'est pas affirmée pour une entité donnée.

Voir la liste de diffusion post Comment faites-vous une jointure gauche dans DateMic? < / a> avec son accompagnant gist pour un exemple.


1 commentaires

En fait, je crois que get-sinon est la bonne approche dans ce cas. C'est une seule requête plutôt que deux étapes. En tant que FYI, une autre fonction similaire intégrée est manquant? .



19
votes

DateMic a récemment été mis à jour avec quelques fonctions d'expression disponibles dans des requêtes de Dateomic. L'une de ces fonctions s'appelle get-sinon et il vous permet de fournir une valeur de retour par défaut si un attribut n'existe pas sur une entité, de savoir comment Clojure.core / Get retournera une option troisième paramètres si la clé n'est pas trouvée.

Ainsi, en utilisant votre propre exemple, vous n'auriez besoin que de le changer comme si:

[: Trouver? N? A? L : Où [? N: Âge? A] [(get-else-ormifier? N: aime faux)? l]

Malheureusement, vous ne pouvez pas réellement faire nil une valeur "par défaut" car ce n'est pas un type de données de DaTomic valide, et Dateomic va carpe si vous essayez, mais FALSE devriez vous amener où vous allez aussi.


1 commentaires

Ce n'est plus la bonne réponse. Voir Stackoverflow.com/a/35741268/24172



9
votes

Vous pouvez également essayer le "manquant?" fn.

regarder sur ceci:

http://docs.datomic.com/query.html#missing < / p>


0 commentaires