Widzę dla ciebie dwie opcje.
Pierwsza opcja jest użycie JohnnyHK's solution z find-and-modify
funkcji:
(mc/find-and-modify "users"
(select-keys my-doc [:_id])
{ $push { :awards { :award "IBM Fellow"
:year 1963
:by "IBM" }}}
:return-new true)
Drugą opcją jest użycie save
zamiast update
. To dobry wybór, jeśli masz już cały dokument załadowany z mongodb. Możesz łatwo zastąpić operatorów mongodb, takich jak $push
z funkcjami clojure
, takimi jak update-in. Manipulowanie mapami clojure wydaje mi się lepszym podejściem. Jeśli masz problemy ze znalezieniem alternatywy dla clojure dla operatorów Mongodb, mogę Ci pomóc.
Na moim poprzednim przykładzie będzie to wyglądać tak:
(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))
Myself, wolę ten sposób, ponieważ wygląda bardziej Clojure-owski.
Dzięki. Przyjąłem odpowiedź Leonida, ponieważ ma on niższą reputację i więcej skorzysta z nagrody. Ponieważ nie mogę zaakceptować obu odpowiedzi, przynajmniej wznowiłem twoje. Mam nadzieję, że to w porządku dla ciebie. – tobiasbayer
@CodeBrickie Nie mogę powiedzieć, że się zgadzam, ponieważ Leonid zasadniczo skopiował moją odpowiedź, ale jak powiedział Obiwan: "Musisz oczywiście zrobić to, co uważasz za słuszne." – JohnnyHK
Skopiował twoje i dodał drugą opcję. Więc on także wytworzył znaczną wartość. – tobiasbayer