Dave Ranjan
Dave Ranjan

Reputation: 2984

How to sort result in a Datalog query

I am using datomic with play framework. Play is amazing and datomic is fast. So a good combination overall. Since, I am new to datomic (and datalog i.e. query language datomic uses), I am unable to sort my result ( like we do, order by in sql). For example.

if my query is :

q= [:find ?title 
:where 
[?e :movie/title ?title]
[?e :movie/director "Dave Swag"]
[?e :movie/year ?year]
[(sort ?year)] //here I am trying to sort by year
]

It should return titles of the movies whose director was Dave Swag and result is ordered by year in which image was released. Thankyou :)

Upvotes: 11

Views: 6652

Answers (1)

Daniel Compton
Daniel Compton

Reputation: 14549

If you want to sort your result set, you will need to do this outside of the query, on the returned result set. There is an example of this on a Datomic blog post about querying in listing 20:

(def hist (d/history db))

(->> (d/q '[:find ?tx ?v ?op
            :in $ ?e ?attr
            :where [?e ?attr ?v ?tx ?op]]
        hist
        editor-id
        :user/firstName)
   (sort-by first))

=> ([13194139534319 "Ed" true]
    [13194139534335 "Ed" false]
    [13194139534335 "Edward" true])

Upvotes: 9

Related Questions