Я попадаю в датом и все еще не понимаю. Как создать транзакцию с ссылками на переменное число объектов?Как создать транзакцию, имеющую ссылки на переменное число сущностей?
Например, это создает сделку с дочерним объектом и семьи лица с атрибутом ребенка, который ссылается на новый дочерний объект:
(defn insert-child [id child]
{:db/id #db/id id
:child/first-name (:first-name child)
:child/middle-name (:middle-name child)
:child/last-name (:last-name child)
:child/date-of-birth {:date-of-birth child}})
(defn insert-family [id]
(let [child-id #db/id[:db.part/user]]
(vector
(insert-child child-id
{:first-name "Richard"
:middle-name "M"
:last-name "Stallman"})
{:db/id id
:family/child child-id})))
(insert-family #db/id[:db.part/user])
=> [{:db/id #db/id[:db.part/user -1000012],
:child/first-name "Richard",
:child/middle-name "M",
:child/last-name "Stallman",
:child/date-of-birth nil}
{:db/id #db/id[:db.part/user -1000013],
:family/child #db/id[:db.part/user -1000012]}]
Примечание Я использовал пусть для child-id
. Я не уверен, как написать это, чтобы я мог сопоставить insert-child
, имея семейную сущность, которая ссылается на каждую из них.
Я думал об использовании iterate
над #db/id[:db.part/user]
и количестве потомков, отображающих как результат iterate
, так и вектор детей. Кажется, что запутанный и #db/id[:db.part/user]
не является функцией для начала итерации.
Вы можете иметь 'kids-tx' и' kids-id' в одной форме 'let' здесь, так как' let' clojure связывается последовательно, как «let *» Common Lisp, а не параллельно, как CL 'let'. – deadghost
Хороший улов - я пересмотрел пример. –