用Monger返回更新后的文档



在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。

相关内容

  • 没有找到相关文章

最新更新