2016-06-08 5 views
2

Datomic 풀 표현 :내가 여기 Datomic 풀 구문에 대해 읽고 있었다

http://docs.datomic.com/pull.html

그리고 그것은 [*] 같은 패턴이 엔티티를 당겨 재귀의 개체 속성을 끌어 것이다 와일드 카드 아래에 설명합니다. 직접 인용 :

와일드 카드 사양 * 기업의 모든 속성을 가져옵니다, 재귀 적 구성 요소 속성을 가져옵니다 : 나는 자신이하려고 할 때 난 단지 ref에 대한 db/id 값을 가져,

;; pattern 
[*] 

;; result 
{:release/name "The Concert for Bangla Desh", 
:release/artists [{:db/id 17592186049854}], 
:release/country {:db/id 17592186045504}, 
:release/gid #uuid "f3bdff34-9a85-4adc-a014-922eef9cdaa5", 
:release/day 20, 
:release/status "Official", 
:release/month 12, 
:release/artistCredit "George Harrison", 
:db/id 17592186072003, 
:release/year 1971, 
:release/media 
[{:db/id 17592186072004, 
    :medium/format {:db/id 17592186045741}, 
    :medium/position 1, 
    :medium/trackCount 2, 
    :medium/tracks 
    [{:db/id 17592186072005, 
    :track/duration 376000, 
    :track/name "George Harrison/Ravi Shankar Introduction", 
    :track/position 1, 
    :track/artists [{:db/id 17592186048829} {:db/id 17592186049854}]} 
    {:db/id 17592186072006, 
    :track/duration 979000, 
    :track/name "Bangla Dhun", 
    :track/position 2, 
    :track/artists [{:db/id 17592186048829}]}]} 
    ... 
    ]} 

을하지만 유형. 기본적으로 내가 이런 걸과 함께 pull 표현에서 더 자세한 방법으로 어떤 심판 유형을 호출 할 수 있습니다

[* {:content/type [:db/ident] :content/locales [:db/ident] :content/groups [*]}] 

을 그리고 그 자체가 그 안에 ref 종류가 있습니다 :content/groups 때문에, 심지어 실제로 그것의 끝이 아니다 . 와일드 카드의 동작이 언젠가 변경되고 문서가 최신 버전이 아니 었습니까? 아니면 내가 잘못하고있는거야? "재귀 적으로 모든 것을 끌어 당깁니다"라는 말에 대해 더 나은 (더 간결한) 방법이 있습니까?

답변

2

끌어 오기 식의 와일드 카드는 구성 요소 특성 만 채 웁니다. 즉, 스키마에 :db/isComponent true의 특성이 있습니다. mbrainz schema 보면

:release/media:medium/tracks 구성 요소 속성입니다, 그래서 그들은 [*] 풀 패턴으로 채워 유일한 사람이 될 것입니다. 데이터 모델은 계층 참조 체인 (또한 참조 친구를 가질 수있는 사람에 대한 참조로 즉 :person/friend)를 포함하는 경우

, 당신은 recursive pull patterns를 정의하고 자신의 재귀 깊이를 지정 (또는 억제 할에 대한 ... 사용) 할 수 있습니다.

이 항목은 Datomic Google Group에서도 논의되며 예제 재귀 식 패턴에 대한 링크가 포함되어 있습니다.

+0

오케이, 매번 모든 것을 가져 오는 것이 나의 목적이라면': db/isComponent true'를 사용하지 않기로 결정한 이유가 있습니까? – Kevin

+0

그래서 여기에서 읽으십시오 : http://blog.datomic.com/2013/06/component-entities.html 그것은 구성 요소가 부모없이 스스로 존재하지 않는 하위 오브젝트를 다루는 것처럼 보입니다. enum 값에': isComponent true'가있는 것이 합리적입니까? – Kevin

+0

에서 알 수 있듯이, 모든 열거 형은': db/id'와 같으므로 레코드가 수축되면': db/id' 또한 취소됩니다. 따라서 enum 값을': db/isComponent true'로 설정하는 것이 바람직합니다. 왜냐하면 pull 식에서 모든 단일 enum을 수동으로 지정하고 싶지 않지만 다른 한편으로는 엔티티간에 정의를 공유하고 있기 때문입니다. 그래서': db/isComponent'에는 적합하지 않습니다. 그 맞습니까? – Kevin

관련 문제