在Monger中,有一个insert-and-return函数用于返回新插入的文档。
没有update-and-return函数。
如何从执行更新的函数返回更新后的文档?
我想我可以使用save-and-return,但在我看来,我不能在这个函数中使用像$push这样的运算符。
发布于 2013-01-15 20:08:01
我可以为你提供两个选择。
第一个选项是使用带有find-and-modify函数的JohnnyHK's solution:
(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加载了整个文档,那么这是一个很好的选择。你可以很容易地用像update-in这样的clojure函数替换像$push这样的mongodb操作符。在我看来,使用clojure map进行操作是更好的方法。如果您在寻找mongodb操作符的clojure替代方案时遇到问题,我可以帮助您。
对于我前面的示例,它将如下所示:
(mc/save-and-return "users"
(update-in my-doc [:awards] conj
{ :award "IBM Fellow"
:year 1963
:by "IBM" }))我自己,我更喜欢这种方式,因为它看起来更像Clojure。
发布于 2013-01-16 08:12:43
这就是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)https://stackoverflow.com/questions/14153119
复制相似问题