的Datomic Queries and Rules文檔的「嵌入式」部分說:獲取所有領域
查詢語言,如SQL圍繞着一個客戶端 - 服務器模型 面向地方,在一個單一的conversaton,你會要同時擁有:
- 回答您的根本問題,例如誰在這個月買了襪子。
- 恢復報告和處理所需的任何附加信息,例如他們的名字和電子郵件地址是什麼。
後者其實不是一個查詢,它只是一個機械導航 來相關的信息。
雖然我很欣賞這兩個不同方面的正交性,但我認爲我經常需要檢索一個完整的實體,無論其屬性如何。
據我所知,查詢通常有這樣的形式:
(datomic.api/q '[:find ?name ?age ?email
:where
[?e :myapp/name ?name]
[?e :myapp/age ?age]
[?e :myapp/email ?email]]
(db conn))
如果我想檢索有N個屬性的實體,我讓他們列出他們都在各自的查詢,這似乎有些單調乏味並且容易出錯。
如何告訴Datomic檢索包含所有字段的實體,而不必明確指定它們?
一對夫婦的注意事項:(1)實體不「隱藏」屬性,它們是獲取實體屬性和相關實體的懶惰接口。從性能的角度來理解這一點非常重要,它解釋了爲什麼這些屬性並不都是立即可見的 - 它必須從數據庫中提取數據以顯示屬性,從而打敗懶惰的優勢。 (2)不需要將實體合併到地圖中,只需調用[touch](http://docs.datomic.com/clojure/#datomic.api/touch)函數即可獲得所有屬性。 – camdez