通过 eid 从 datomic 获取项目,输入太少?

getting items by eid from datomic, too few inputs?

所以我正在尝试使用实体 ID 来检索最近交易到数据数据库的项目。

但是,在调用 (get-post-by-eid zzzzzzzzz) 时出现错误

IllegalArgumentExceptionInfo :db.error/too-few-inputs Query expected 2 inputs but received 1  datomic.error/arg (error.clj:57)


(defn get-post-by-eid [eid]
   (d/q '[:find ?title ?content ?tags ?eid
              :in $ ?eid
              :where
              [?eid post/title ?title]
              [?eid post/content ?content]
              [?eid post/tag ?tags]] (d/db conn)))

所以我想我的查询字符串一定是格式错误..

我一直在看 http://www.learndatalogtoday.org/chapter/3 但仍然不确定我误入歧途的地方。

感谢任何帮助(=

您的 :in 子句指定您希望将两个数据源传递给 q 函数。 $ ?eid 意味着你说你要传入一个数据库(绑定到 $),以及一些其他值,它将绑定到 ?eid.

像这样:

(defn get-post-by-eid [eid]                  
  (d/q '[:find ?title ?content ?tags ?eid    
         :in $ ?eid                          
         :where                              
         [?eid post/title ?title]            
         [?eid post/content ?content]        
         [?eid post/tag ?tags]]              
       (d/db conn)                           
       eid))  

否则,您的 eid 参数无法真正获得 "into" 查询。你必须明确地传递它,那里没有魔法。