gpt4 book ai didi

clojure - 如何列出所有用户创建的属性?

转载 作者:行者123 更新时间:2023-12-02 15:40:48 26 4
gpt4 key购买 nike

我尝试使用下面的代码查找所有用户创建的属性,它返回许多其他默认属性,例如 db/uniquefressian/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)))

最佳答案

一种方法是将要过滤或包含的命名空间列入白/黑名单。请注意,Datomic 的某些内置属性和用户属性之间没有区别。您可以在任何系统命名空间中自由创建属性,例如db.type 但当然你不应该这样做。

话虽如此,只有少数命名空间用于系统属性,因此您可以简单地过滤掉那些已知命名空间。例如

(def system-ns #{"db" "db.type" "db.install" "db.part" 
"db.lang" "fressian" "db.unique" "db.excise"
"db.cardinality" "db.fn"})

(d/q '[:find ?e ?ident
:in $ ?system-ns
:where
[?e :db/ident ?ident]
[(namespace ?ident) ?ns]
[((comp not contains?) ?system-ns ?ns)]]
(d/db conn) system-ns)

关于clojure - 如何列出所有用户创建的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com