3

以下のコードを使用して、ユーザーが作成したすべての属性を見つけようとしましたが、 や など、他の多くのデフォルト属性が返されdb/uniqueますfressian/tag

それらなしでセットを取得したいので、接頭辞で属性を除外するよりも取得するためのより良い方法があるかどうか疑問に思っていました.

ありがとう

(q {:find '[?ident]
    :where '[[:db.part/db :db.install/attribute ?p]
             [?p :db/ident ?ident]]} db)

また

(filter (partial instance? datomic.db.Attribute)
      (:elements (p/db)))
4

3 に答える 3

0

ユーザー定義属性を表示:

(clojure.pprint/print-table (->> (d/pull db '{:eid 0 :selector [{:db.install/attribute [*]}]})
                                 :db.install/attribute
                                 (remove (fn [m] (or (clojure.string/starts-with? (namespace (:db/ident m)) "db") (clojure.string/starts-with? (namespace (:db/ident m)) "fressian"))))
                                 (map #(update % :db/valueType :db/ident))
                                 (map #(update % :db/cardinality :db/ident))
                                 (sort-by :db/ident)))

(get-schemaここの関数から適応: Datomicion-starter - GitHub )

出力:

| :db/id |    :db/ident |    :db/valueType |      :db/cardinality |
|--------+--------------+------------------+----------------------|
|     74 |   :inv/color | :db.type/keyword |  :db.cardinality/one |
|     80 |   :inv/count |    :db.type/long |  :db.cardinality/one |
|     75 |    :inv/size | :db.type/keyword |  :db.cardinality/one |
|     73 |     :inv/sku |  :db.type/string |  :db.cardinality/one |
|     76 |    :inv/type | :db.type/keyword |  :db.cardinality/one |
|     79 |  :item/count |    :db.type/long |  :db.cardinality/one |
|     78 |     :item/id |     :db.type/ref |  :db.cardinality/one |
|     77 | :order/items |     :db.type/ref | :db.cardinality/many |
于 2021-05-11T22:02:13.170 に答える