2012-09-16 27 views

Trả lời

7

Bạn sẽ có thể để có được một danh sách tất cả các phân vùng trong cơ sở dữ liệu bằng cách tìm kiếm cho tất cả các đơn vị liên quan đến việc tổ chức :db.part/db qua :db.install/partition thuộc tính:

(ns myns 
    (:require [datomic.api :as d])) 

(defn get-partitions [db] 
    (d/q '[:find ?ident :where [:db.part/db :db.install/partition ?p] 
          [?p :db/ident ?ident]] 
     db)) 

Note

Phiên bản hiện tại của Datomic (xây dựng 0.8.3524) có một thiếu sót như vậy mà :db.part/tx:db.part/user (hai trong số ba phân vùng tích hợp) được xử lý đặc biệt và không thực sự liên kết với :db.part/db qua :db.install/partition, do đó kết quả của hàm truy vấn ở trên sẽ không bao gồm cả hai.

Vấn đề này is going to be addressed trong một trong các bản dựng tương lai của Datomic. Trong thời gian chờ đợi, bạn nên tự chăm sóc bao gồm cả :db.part/tx:db.part/user trong tập kết quả.

1

1 phương pháp - sử dụng truy vấn

=> (q '[:find ?i :where 
     [:db.part/db :db.install/partition ?p] [?p :db/ident ?i]] 
    (db conn)) 

2 phương pháp - từ đối tượng db

(filter #(instance? datomic.db.Partition %) (:elements (db conn))) 

Phương pháp thứ hai trả về chuỗi các datomic.db.Partition đối tượng có thể được hữu ích nếu chúng ta muốn nhận thêm thông tin về phân vùng.

Cả hai phương pháp đều đã biết lỗi/mâu thuẫn: chúng không trả lại: db.part/tx và: db.part/phân vùng dựng sẵn của người dùng.

Các vấn đề liên quan