6

Datomicデータベースのすべてのパーティションを一覧表示するクエリとは何ですか?

これは戻るはずです

[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]

ここで、....はすべてのユーザー定義パーティションです。

4

2 に答える 2

7

属性:db.part/dbを介してエンティティに関連付けられているすべてのエンティティを検索することにより、データベース内のすべてのパーティションのリストを取得できるはずです。:db.install/partition

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

ノート

Datomicの現在のバージョン(ビルド0.8.3524)には、:db.part/txand :db.part/user(3つの組み込みパーティションのうちの2つ)が特別に扱われ、実際には:db.part/dbviaに関連付けられていないという欠点が:db.install/partitionあるため、上記のクエリ関数の結果は2つを含めます。

この問題は、Datomicの将来のビルドの1つで対処される予定です。それまでの間、結果セットを自分:db.part/txで含めるように注意する必要があります。:db.part/user

于 2012-09-16T22:15:50.600 に答える
1

最初の方法-クエリを使用

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

2番目のメソッド-dbオブジェクトから

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

2番目のメソッドは、datomic.db.Partitionオブジェクトのシーケンスを返します。これは、パーティションに関する追加情報を取得する場合に役立ちます。

どちらのメソッドにも既知のバグ/不整合があります。:db.part / txおよび:db.part/userの組み込みパーティションを返しません。

于 2013-04-15T22:50:08.393 に答える