8

我试图找到一种优雅的方式来更新现有的 MongoDB 文档,其中包含从网页接收到的数据作为 json。问题是我事先不知道要更新哪些字段 - 所以我不能使用set__field,我的 MongoDB 文档中只有要更新的字段的 json 表示。另外,我正在使用 DynamicDocuments,因此可能需要在文档上设置新字段。例如:

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 执行此操作,除非我手动 setattr(myDocInstance, nameOfField, val),这对我来说看起来并不那么优雅。谢谢!

4

2 回答 2

8

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

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()
于 2013-03-14T11:48:44.280 回答
1

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

ActivityType.objects.filter(id=request.form['pk']).update(**{'set__'+request.form['name']: request.form['value']})
于 2014-03-13T02:41:24.750 回答