使用 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()