在Monger中有一个insert-and-return
函数用于返回新插入的文档。
没有update-and-return
功能。
如何从执行更新的函数返回更新后的文档?
我想我可以使用save-and-return
,但在我看来,我不能使用像$push
这样的操作符与此功能。
这就是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)
我有两个选择。
第一种选择是使用JohnnyHK的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加载了整个文档,那么这是一个不错的选择。您可以轻松地将mongodb操作符(如$push
)替换为clojure
函数(如更新)。对我来说,使用clojure映射进行操作似乎是更好的方法。如果你在寻找mongodb操作符的clojure替代品方面有问题,我可以帮助你。
(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))
我自己更喜欢这种方式,因为它看起来更像clojure。