Clojure Datomic:不区分大小写的查询
我是Datomic的新手,我正在努力理解如何进行不区分大小写的查询 例如:Clojure Datomic:不区分大小写的查询,clojure,datomic,Clojure,Datomic,我是Datomic的新手,我正在努力理解如何进行不区分大小写的查询 例如: [:find (pull ?u [:user/email]) :where [?u :user/email "user1@example.net"]] 返回: {:user/email "user1@example.net"} 我希望此查询为指定为“”的电子邮件返回相同的值USER1@example.net但Datomic正在对电子邮件进行区分大小写的比较,如图所示 [:find (pull ?u [:us
[:find (pull ?u [:user/email])
:where [?u :user/email "user1@example.net"]]
返回:
{:user/email "user1@example.net"}
我希望此查询为指定为“”的电子邮件返回相同的值USER1@example.net但Datomic正在对电子邮件进行区分大小写的比较,如图所示
[:find (pull ?u [:user/email])
:where [?u :user/email "USER1@example.net"]]
返回:
Nothing
关于形成查询以便进行区分大小写的比较的最佳方法有何建议?要执行不区分大小写的查询,我使用Clojure
re find
函数形成查询,对传递的电子邮件执行不区分大小写的正则表达式匹配,如下所示:
[:find (pull ?u [:user/email])
:where
[?u :user/email ?email]
[(re-find #"(?i)USER1@example.net" ?email)]
] db)
现在返回:
{:user/email "user1@example.net"}
只需将查询字符串和数据库项转换为小写
(defn case-insensitive-get-email
[email]
(d/q '[:find ?lowercaseEmail .
:in $ ?email
:where
[?e :user/email ?originalEmail]
[(.toLowerCase ^String ?originalEmail) ?lowercaseEmail]
[(= ?lowercaseEmail ?email)]]
db (.toLowerCase email)
)
)
然后
(不区分大小写获取电子邮件)USER1@example.net“”
意志
返回
"user1@example.net"