Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从json更新Mongoengine动态文档_Python_Mongoengine - Fatal编程技术网

Python 如何从json更新Mongoengine动态文档

Python 如何从json更新Mongoengine动态文档,python,mongoengine,Python,Mongoengine,我试图找到一种优雅的方法,用从网页接收的json数据更新现有MongoDB文档。问题是我事先不知道哪些字段要更新,所以我不能使用set_uufield,我的MongoDB文档中只有要更新的字段的json表示。另外,我正在使用DynamicDocuments,因此可能需要在文档上设置新字段。 e、 g: json可能看起来像-例如: {"_id" : "123", "study_name" : "Statistics"} 或 我可以从控制台或使用pymongo轻松地完成这项工作,但我不知道如何使

我试图找到一种优雅的方法,用从网页接收的json数据更新现有MongoDB文档。问题是我事先不知道哪些字段要更新,所以我不能使用set_uufield,我的MongoDB文档中只有要更新的字段的json表示。另外,我正在使用DynamicDocuments,因此可能需要在文档上设置新字段。 e、 g:

json可能看起来像-例如:

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

我可以从控制台或使用pymongo轻松地完成这项工作,但我不知道如何使用Mongoengine完成这项工作,除非我手动设置ATTR(myDocInstance,nameOfField,val),这在我看来并不优雅。
谢谢

您可以在初始化类时传递数据:

data = {"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"}
doc = Study(**data)
要更新现有模型,可以调用update(首选)或更改模型并调用save

例如:


普通蒙哥尼发动机。在我的例子中,我从x-editable收到一个表单,该表单中的字段与我的模式同名,因此我可以使用该表单直接访问数据库

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

如果您需要纯无模式数据库,为什么选择有严格规则的ORM?你应该试试pymongo。因为我希望有一个文档和嵌入文档的层次结构,并定义一组必填字段,而我在可选字段上非常灵活。“文档和嵌入文档的层次结构”是开发人员的任务,而不是ORM,“并定义一组必填字段”如果我们谈论web应用程序,您可以验证来自用户的表单。它不仅仅是一个web应用程序,它是一个复杂应用程序的后端,在前端公开一个REST API。是的,我可以在应用程序的逻辑中定义文档的层次结构,但是我还必须重写由ORM(Mongoengine)实现的一些功能,我明白了……那么,谢谢你的建议。我开始对Mongoengine有点恼火,因为我找不到好的完整示例来说明如何执行文档中提到的操作,以及每个参数应该是什么样子。是的,但我需要的是修改现有文档,这在过去已经启动。您需要在模型上或通过发出更新查询来设置属性。确定。如果我在模型上设置属性-并假设它们是固定的,那么如果我事先不知道要更新哪些字段,而我只是将它们作为json来更新,那么更新查询是什么样子的?更新了示例-最后两个实际上是相同的-但是您可能希望通过添加基于dictOk的更新方法来抽象它,这些大概也是我想的解决方案。我想可能还有另一种方法可以做到这一点,使用Mongoengine的更新功能,但我无法让它工作。谢谢
data = {"_id" : "123", "study_type" : "research", "study_name" : "Statistical analysis"}
doc = Study(**data)
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()
ActivityType.objects.filter(id=request.form['pk']).update(**{'set__'+request.form['name']: request.form['value']})