使用Monger返回更新的文档

tob*_*yer 5 clojure mongodb monger

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

没有update-and-return功能.

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

我想我可以使用,save-and-return但在我看来,我不能使用像$push这个功能的运算符.

Leo*_*tny 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)
Run Code Online (Sandbox Code Playgroud)

第二个选项是使用save而不是update. 如果您已经从 mongodb 加载了整个文档,那么这是一个不错的选择。您可以轻松替换 mongodb 运算符,例如$push使用update-inclojure等函数。对我来说,使用 clojure 映射进行操作似乎是更好的方法。如果您在寻找 mongodb 运算符的 clojure 替代品时遇到问题,我可以帮助您。

对于我之前的例子,它看起来像这样:

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

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