如何解决具有唯一索引的Mongoengine中的Upsert操作
我正在使用mongoengine版本0.20.0
我有一个文档,该文档的属性为EmbeddedDocuments类型和ReferenceField,该文档在EmbeddedDocuments的属性上也具有唯一索引。
作为我的应用程序的一部分,我需要能够对文档执行upsert操作,
我尝试将document.save()操作与force_insert = False一起使用,但是仍然给我DuplicatKeyError / NotUniqueKeyError
我尝试使用
document.modify(query={"class_1": class_1},**document.to_mongo().to_dict(),upsert=True)
但是这给了我一个错误,那就是引用字段必须是类型
mongoengine.errors.ValidationError: A ReferenceField only accepts DBRef,LazyReference,ObjectId or documents
“收集模式”如下。
class Class_1(EmbeddedDocument):
attr_1 = StringField()
attr_2 = StringField()
class Class_2(Document):
meta = {"collection": "class_2"}
attr_1 = StringField()
attr_2 = IntField()
class class_3(Document):
meta = {
"collection": "class_3","indexes": [
{
"fields": ["class_1.attr_1","class_1.attr_2"],"unique": True,"name": "unique_index",}
]
}
class_1 = EmbeddedDocumentField(Class_1)
class_2 = ReferenceField("Class_2")
想知道是否有一种更简单的方法来对mongoengine文档进行upsert操作。
理想情况下,我正在寻找一种方式来更新整个文档,而不必指定需要更新的每个单独字段,作为我的应用程序的一部分,我将始终仅具有完整的文档更新。 / strong>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。