2012-06-14 1 views
12

튜토리얼 http://www.datomic.com/company/resources/tutorial을 따르고 있습니다 만, Datomic의 시간 모델에 액세스하는 방법에 대한 간단한 퍼즐 조각이 누락 된 것 같습니다.Datomic에서 특정 엔티티 값의 변경 사항에 대한 타임 라인보기를 얻으려면 어떻게해야합니까?

추가하고

;; DO a series of transactions 
;; (transact conn [:db/add entity-id attribute value0]) 

(use 'datomic.api) 
(dir datomic.api) 
(def conn (connect "datomic:dev://localhost:4334/demo")) 

(transact conn '[:db/add 2000 :db/doc "Hello There"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 1"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 1"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 2"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 2"]]> 

(transact conn '[:db/add 2000 :db/doc "Hello There 3"]) 
(q '[:find ?e ?n :where [?e :db/doc ?n] [(= 2000 ?e)]] (db conn)) 
; => <HashSet [[2000 "Hello There 3"]]> 

가 어떻게가 값의 일련의 변화 얻을 수 있습니다 철회의 나는 일련의 작업을 수행하는 경우 (법인 2000 속성 : dB/문서를)?

내가 예를 들어

[ [Transaction Number, Time, Value] .... [Transaction Number, Time, Value]] 

의 형식으로 뭔가를 얻으려면 :

[ [T1, "2012-March-16-9:30:12", "Hello There"] 
    .... 
    .... 
    .... 
    [T27, "2012-June-14-9:54:38", "Hello There 3"] ] 

그것은 어려운 일 수는 없지만, 많은이 있습니다 데시벨 내부 매개 변수가 I 익숙하지 않아.

답변

9

in the reference.

모든 주장과 시간에 걸쳐 철회를 포함하는 특수 데이터베이스를 돌려줍니다 (history db) 기능을 살펴보십시오. 이 특수 데이터베이스는 데이터베이스 및 색인 범위 호출 및 쿼리에 대해서는 에는 사용할 수 있지만 엔티티에는 사용하지 않으며 호출에는 을 사용할 수 없습니다. 현재와 ​​이후의 경계도 지원됩니다. [추가 TX EAV]

당신이 뭔가를 할 수 history 사용 (추가/어설 마찬가지) 추가 : 쿼리 다섯 번째 datom 필드에 의해 구별 될 수있는 추가 및 철회, 모두를 얻을 것이다합니다 이 데이터를 얻을처럼 당신이 원 :

datomic-test.core> (q '[:find ?tx ?tx-time ?v 
         :in $ ?e ?a 
         :where [?e ?a ?v ?tx _] 
           [?tx :db/txInstant ?tx-time]] 
         (d/history (db conn)) 
         2000 
         :db/doc) 
#<HashSet [[13194139534315 #inst "2012-09-09T00:45:49.086-00:00" "Hello There"] [...]]> 

또한 대신 2000처럼 하드 코드 번호를 사용하는 ID를 얻을 수 (tempid :db.part/user) 봐.

+0

멋진 ...이 게임은 = – zcaudate