更新Mongoengine文档而不主动跟踪已更改的字段

时间:2014-09-11 15:39:13

标签: python mongodb updates mongoengine

我读了很多问题&关于如何在Mongoengine(和MongoDB)中更新文档的SO的答案,但我的问题是所有人都推荐"手动"将所有想要更新的字段作为参数给予参数 - 例如

p.update(**{
    "set__name": "Hank",
    "set__address": "Far away"

})

我遇到的问题如下:

  1. 我需要跟踪所有修改过的字段
  2. 我需要在dict中指定我想要更新的字段的所有名称
  3. 我需要指定一个特定于我正在修改的字段类型的修饰符以及我在该字段上执行的操作。
  4. 有没有办法以更高级别的方式使用Python更新Mongoengine / MongoDB中的文档? (更具体地说,我希望更新MongoDB中的文档,如果它自上次从数据库中读取以来没有更改过。)

    所以我的申请非常复杂。我经常传递一个对象 p ,它对应于数据库中的文档,因此不同的方法会修改它的字段,然后在所有更新结束时我想要保存修改后的文档而不用不得不担心哪个字段有变化以及我需要使用哪个修饰符。

    有任何建议我如何做到这一点或实施某些事情来做到这一点?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我刚刚找到了我的问题的答案:似乎从mongoengine 0.8.5开始,他们在save()函数中添加了一个新参数 - 称为save_condition - 这正是我所要求的:

save_condition – only perform save if matching record in db 
                 satisfies condition(s) (e.g., version number)

(根据文件: http://docs.mongoengine.org/apireference.html