2015-04-14 20 views
6

Sto usando datomic con framework di gioco. Il gioco è fantastico e datomico è veloce. Quindi una buona combinazione nel complesso. Dal momento che, sono nuovo di datomic (e di datalog, cioè degli usi datomici del linguaggio di query), non sono in grado di ordinare il mio risultato (come facciamo, ordinare in sql). Per esempio.Come ordinare il risultato in una query Datalog

se la mia domanda è:

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 
] 

Dovrebbe restituire titoli dei film cui direttore era Dave Swag e di risultato è ordinato per anno in cui è stato rilasciato l'immagine. Grazie :)

+0

Hey mi sono bloccato nello stesso posto, fatemi sapere se avete questo capito? –

+1

Una query datalog trova l'insieme di tutte le variabili (o tuple di variabili) che soddisfano l'insieme di clausole. L'ordinamento in realtà non ha alcun posto _inside_ query - dovrebbe essere fatto sul risultato della query al di fuori della query. I.e, restituisci una serie di tuple [? Title? Year] e ordinale per anno (in una raccolta ordinata) usando Clojure o Java (o Scala in questo caso). –

risposta

5

Se si desidera ordinare il risultato impostare, sarà necessario farlo al di fuori della query, sul set di risultati restituito. V'è un esempio di questo su un Datomic blog post about querying nell'elencare 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]) 
+0

Volevo semplicemente aggiungere il riferimento al proprio aggregatore di ordinamento incorporato di Datomic che può essere combinato per ordinare più campi dal set di risultati. – m33lky

+0

Puoi mostrare come ordinare in base alla data di inserimento della transazione? (prima il più recente) O almeno, come posso recuperare la data della transazione –

+0

@ m33lky potresti, per favore, ampliare questo? Non riesco a trovare nulla su "sort aggregator". –

Problemi correlati