在Monger中,有一个insert-and-return
函数用于返回新插入的文档。
没有update-and-return
功能。
如何从执行更新的函数返回更新的文档?
我想我可以使用save-and-return
,但在我看来,我无法使用$push
之类的运算符来使用此功能。
答案 0 :(得分:4)
这是Monger的find-and-modify
功能的目的。
;; Atomically find the doc with a language of "Python", set it to "Clojure", and
;; return the updated doc.
(mgcol/find-and-modify collection
{:language "Python"}
{:$set {:language "Clojure"} }
:return-new true)
答案 1 :(得分:1)
我可以看到两个选项。
第一个选项是JohnnyHK's solution使用find-and-modify
函数:
(mc/find-and-modify "users"
(select-keys my-doc [:_id])
{ $push { :awards { :award "IBM Fellow"
:year 1963
:by "IBM" }}}
:return-new true)
第二个选项是使用save
代替update
。如果您已经从mongodb加载了整个文档,那么这是一个不错的选择。您可以使用$push
等clojure
函数轻松替换(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))
等mongodb运算符。使用clojure地图操作对我来说似乎是更好的方法。如果您在为mongodb操作员找到clojure替代品时遇到问题,我可以帮助您。
对于我之前的示例,它将如下所示:
{{1}}
我自己,我更喜欢这种方式,因为它看起来更像Clojure-ish。