2016-03-22 6 views

Antwort

2

Sie können eine Datalog-Abfrage im Allgemeinen nicht wirklich dafür verwenden, da Sie alle Daten der Datenbank durchsuchen müssten, was Datalog Ihnen nicht erlauben wird.

Gegebene Entity-ID können Sie die Partition abrufen, indem Sie die part-Funktion der Peer-Bibliothek aufrufen.

Sie können dann eine filter in Ihrer Datenbank verwenden, um nur diese Daten anzuzeigen. Hier ist ein Clojure Beispiel:

(defn part-db 
    "Given a db and a partition entity id, 
    returns a view of the db with only the datoms which entities are of this partition." 
    [db part] 
    (d/filter db (fn [_ ^Datom datom] 
       (-> datom .e d/part (= part)) 
       ))) 

Um die Einheit-ID der Partition herauszufinden, von ihm Namen (zB :my.partitions/part1) ist, können Sie zum Beispiel lösen sie als Entity:

(def my-part-id (:db/id (d/entity mydb :my.partitions/part1))) 

Von hier aus Sie kann:

  1. Liste alle datoms Ihrer Datenbank durch den Index: (d/datoms (part-db mydb my-part-id) :eavt)

  2. Fragen Sie die gefilterte Datenbank mit Datalog ab.

  3. ... was auch immer Sie mit einem Datenbankwert tun!

Beachten Sie, dass, wenn Sie wirklich alle die datoms erhalten möchten, können Sie dies auf eine Geschichte Datenbank tun wollen.

Verwandte Themen