Posso vedere due opzioni per voi.
La prima opzione è quella di utilizzare JohnnyHK's solution con find-and-modify
funzione:
(mc/find-and-modify "users"
(select-keys my-doc [:_id])
{ $push { :awards { :award "IBM Fellow"
:year 1963
:by "IBM" }}}
:return-new true)
Seconda opzione è quella di utilizzare save
invece di update
. È una buona scelta se hai già caricato l'intero documento da mongodb. È possibile sostituire facilmente gli operatori mongodb come $push
con le funzioni clojure
come update-in. La manipolazione con le mappe del clojure mi sembra un approccio migliore. Se hai problemi con la ricerca di alternative di clojure per gli operatori di mongodb, posso aiutarti.
Per il mio esempio precedente che sarà simile a questa:
(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))
me stesso, preferisco in questo modo, perché sembra più Clojure-ish.
fonte
2013-01-15 12:08:01
Grazie. Ho accettato la risposta di Leonid perché ha una reputazione inferiore e beneficerà di più della taglia. Poiché non posso accettare entrambe le risposte, ho almeno rialzato il tuo. Spero che sia ok per te. – tobiasbayer
@CodeBrickie Non posso dire di essere d'accordo dal momento che Leonid ha praticamente copiato la mia risposta, ma come ha detto Obiwan: "Devi fare quello che ritieni giusto, naturalmente." – JohnnyHK
Ha copiato il tuo e ha aggiunto una seconda opzione. Quindi ha prodotto anche un valore sostanziale. – tobiasbayer