使用Monger返回更新的文档

时间:2013-01-04 07:41:59

标签: mongodb clojure monger

在Monger中,有一个insert-and-return函数用于返回新插入的文档。

没有update-and-return功能。

如何从执行更新的函数返回更新的文档?

我想我可以使用save-and-return,但在我看来,我无法使用$push之类的运算符来使用此功能。

2 个答案:

答案 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加载了整个文档,那么这是一个不错的选择。您可以使用$pushclojure函数轻松替换(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。