Datomic has recently been updated with a few expression functions available to you in Datomic queries. One of these functions is called get-else
and it lets you provide a default return value if an attribute doesn't exist on an entity, much like how clojure.core/get
will return an option third param if the key isn't found.
So using your own example, you would only need to change it like so:
[:find ?n ?a ?l
:where [?n :age ?a]
[(get-else $ ?n :likes false) ?l]
Unfortunately you can't actually make nil
a "default" value since it's not a valid Datomic data type, and Datomic will carp if you try, but false should get you where you're going as well.