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

时间:2015-03-05 19:16:09

标签: clojure datomic

所以我试图使用实体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,但仍不确定我在哪里误入歧途。

感谢任何帮助(=

1 个答案:

答案 0 :(得分:2)

您的: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参数无法实际进入查询。你必须明确地传递它,那里没有魔法。