使用 MongoEngine 'unique_with' 时出现索引错误:索引已存在,但选项不同
Index error when using MongoEngine 'unique_with' : index already exists with different options
我正在使用 MongoEngine 并且我已经声明了两个相关的 类:
from mongoengine import StringField, DynamicDocument, BooleanField
class BaseFile(DynamicDocument):
name = StringField(unique_with=["category"])
category = StringField()
active = BooleanField()
meta = {
"indexes": [
"active"
],
"allow_inheritance": True,
}
class SpecialFile(BaseFile):
tag = StringField()
在查询其中一个 类 时,出现以下错误:
OperationFailure: Index with name: name_1_category_1 already exists with different options
不过,我之前没有创建过那个Index,而且它只声明了一次(在unique_with
中)。如何避免这个错误?
这是一个带有 mongoengine 的 known open issue:当结合使用 unique_with
和继承时,您会遇到这些索引错误。 Mongoengine 尝试创建索引两次,出现错误。
但是有一个解决方法(在链接的 github 问题中显示):使用索引声明在 meta
字典中声明唯一性。
from mongoengine import StringField, DynamicDocument, BooleanField
class BaseFile(DynamicDocument):
name = StringField(required=True)
category = StringField(required=True)
active = BooleanField()
meta = {
"indexes": [
"active",
{"fields": ["name", "category"], "unique": True},
],
"allow_inheritance": True,
}
class SpecialFile(BaseFile):
tag = StringField()
我正在使用 MongoEngine 并且我已经声明了两个相关的 类:
from mongoengine import StringField, DynamicDocument, BooleanField
class BaseFile(DynamicDocument):
name = StringField(unique_with=["category"])
category = StringField()
active = BooleanField()
meta = {
"indexes": [
"active"
],
"allow_inheritance": True,
}
class SpecialFile(BaseFile):
tag = StringField()
在查询其中一个 类 时,出现以下错误:
OperationFailure: Index with name: name_1_category_1 already exists with different options
不过,我之前没有创建过那个Index,而且它只声明了一次(在unique_with
中)。如何避免这个错误?
这是一个带有 mongoengine 的 known open issue:当结合使用 unique_with
和继承时,您会遇到这些索引错误。 Mongoengine 尝试创建索引两次,出现错误。
但是有一个解决方法(在链接的 github 问题中显示):使用索引声明在 meta
字典中声明唯一性。
from mongoengine import StringField, DynamicDocument, BooleanField
class BaseFile(DynamicDocument):
name = StringField(required=True)
category = StringField(required=True)
active = BooleanField()
meta = {
"indexes": [
"active",
{"fields": ["name", "category"], "unique": True},
],
"allow_inheritance": True,
}
class SpecialFile(BaseFile):
tag = StringField()