Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 :)

like image 248
Dave Ranjan Avatar asked Apr 14 '15 07:04

Dave Ranjan


1 Answers

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])
like image 65
Daniel Compton Avatar answered Oct 19 '22 22:10

Daniel Compton