mongoengine独特的约束

时间:2014-07-02 06:30:29

标签: mongodb python-2.7 model mongoengine

我有这个型号:

class SourceModel(Document):
    name = StringField(
        primary_key=True,
        max_length=50,
        required=True,
    )
    # some fields

当我尝试运行此代码时:

for source in SOURCES:
    SourceModel(**source).save()

我有这个错误:

mongoengine.errors.NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error index: mirad.source_model.$name_1  dup key: { : null })

我不知道为什么会出现此错误,因为我的模型中存在unique字段。我将此代码更改为:

for source in SOURCES:

    try:
        SourceModel(**source).save()
    except NotUniqueError:
         old_source = SourceModel.objects(name=source['name']).first()
         print old_source  # this line print None

为什么

1 个答案:

答案 0 :(得分:4)

您的文档模型中可能没有定义唯一索引。但在某个时间点,为“名称”创建了一个唯一的索引。

所以你需要在mongodb中删除该索引,你可以在shell中这样做:

 db = new Mongo().getDB("mirad");
 db.source_model.dropIndex("name_1")