在不主动跟踪更改字段的情况下更新Mongoengine文档
我在StackOverflow上看了很多关于如何在Mongoengine(和MongoDB)中更新文档的问题和回答,但我遇到的问题是,所有的回答都建议“手动”将想要更新的所有字段作为字典传入,比如:
p.update(**{
"set__name": "Hank",
"set__address": "Far away"
})
我对这种做法有以下几个困扰:
- 我需要记录所有被修改的字段
- 我需要在字典中以字符串的形式指定所有想要更新的字段名
- 我需要根据我修改的字段类型和对该字段进行的操作,指定一个特定的修改器。
有没有什么方法可以用Python在Mongoengine/MongoDB中以更高级的方式更新文档?(更具体地说,我希望在MongoDB中更新一个文档,但前提是自从我上次从数据库读取它以来,它没有发生变化。)
我的应用程序相当复杂。我经常传递一个对象p,它对应数据库中的一个文档,这样不同的方法可以修改它的字段,然后在所有更新结束时,我想保存这个修改过的文档,而不必担心哪些字段发生了变化,以及我需要使用什么修改器。
有没有什么建议可以让我做到这一点,或者实现一些功能来帮助我?
谢谢!
1 个回答
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)