Fork me on GitHub
#datascript
<
2021-09-03
>
az19:09:51

Hi all, wondering if someone can help me understand how pull works with recursion when the recursive refs are not using the same cardinality and or the same keys? Here is an example. The first call doesn’t return the desired results. The second call is closer to what I need to achieve, but I need to allow for unbounded recursion.

(d/pull @dsdb '[:node/name {:node/children [{:edge/child ...}]}] [:node/name "Chorizo Wrap"])
;; => #:node{:name "Chorizo Wrap"}

(d/pull @dsdb '[:node/name { :node/children 
                   [{:edge/child 
                       [:node/name {:node/children 
                           [{:edge/child [:node/name]}]}]}]}] [:node/name "Chorizo Wrap"])
;; => #:node{:name "Chorizo Wrap",
;;           :children
;;           [#:edge{:child
;;                   #:node{:name "Sauce",
;;                          :children [#:edge{:child #:node{:name "Salt"}} #:edge{:child #:node{:name "Pepper"}}]}}]}
The schema
{:edge/child #:db{:cardinality :db.cardinality/one :valueType :db.type/ref}
 :edge/parent #:db{:cardinality :db.cardinality/one :valueType :db.type/ref}

 :node/name #:db{:unique :db.unique/identity}
 :node/children #:db{:valueType :db.type/ref :cardinality :db.cardinality/many}
 :node/parents #:db{:valueType :db.type/ref :cardinality :db.cardinality/many}}