5

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

没有update-and-return功能。

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

我想我可以使用save-and-return,但在我看来,我无法使用像$push这个函数这样的运算符。

4

2 回答 2

4

这就是 Mongerfind-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)
于 2013-01-16T00:12:43.173 回答
2

我可以为您看到两个选项。

第一种选择是使用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 运算符替换$pushupdate-inclojure等函数。对我来说,使用 clojure 地图进行操作似乎是更好的方法。如果您在为 mongodb 运算符寻找 clojure 替代品时遇到问题,我可以为您提供帮助。

对于我之前的示例,它将如下所示:

(mc/save-and-return "users"
  (update-in my-doc [:awards] conj
    { :award "IBM Fellow"
      :year  1963
      :by    "IBM" }))

我自己,我更喜欢这种方式,因为它看起来更像 Clojure 风格。

于 2013-01-15T12:08:01.257 回答