如何从json Mongoengine DynamicDocument更新

时间:2013-03-14 10:52:49

标签: python mongoengine

我正在尝试使用从网页收到的数据更新现有MongoDB文档的优雅方式为json。问题是我事先不知道哪些字段会被更新 - 所以我不能使用 set__field ,我只有一个json表示要在我的MongoDB文档中更新的字段。另外我使用的是DynamicDocuments,因此可能会在文档上设置新字段。 e.g:

class Study(DynamicDocument):
    study_accession_nr = StringField()
    study_name = StringField()
    study_type = StringField()

和json看起来像 - 例如:

{"_id" : "123", "study_name" : "Statistics"}

{"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"} 

我可以从控制台轻松地做到,或者使用pymongo,但我不知道如何使用Mongoengine来做这件事,除非我手动设置(myDocInstance,nameOfField,val),这对我来说并不那么优雅。 谢谢!

2 个答案:

答案 0 :(得分:5)

您可以在启动课程时传递数据:

data = {"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"}
doc = Study(**data)

要更新现有模型,您可以调用update(首选)或更改模型并调用save。

例如:

Doc.update(set__VAR=Val, set__VAR2=Val2)

或者

setattr(Doc, 'VAR', val)
setattr(Doc, 'VAR2', val2)
Doc.save()

Doc.VAR = val
Doc.VAR2 = val2
Doc.save()

答案 1 :(得分:0)

普通的MongoEngine。在我的情况下,我从x-editable接收一个表单,其中包含与我的模式同名的字段,因此我可以使用它直接进入数据库。

ActivityType.objects.filter(id=request.form['pk']).update(**{'set__'+request.form['name']: request.form['value']})