NotUniqueError:尝试保存重复的唯一键

时间:2016-11-21 09:16:04

标签: python mongodb mongoengine flask-mongoengine

我不断收到上述错误。我删除了已设置为唯一的现有数据库字段id。但是在保存时我得到了以下异常

raise NotUniqueError(message % unicode(err))
NotUniqueError: Tried to save duplicate unique keys (E11000 duplicate key error index: test.users.$id_1  dup key: { : null })

我的user表格如下,

class Users(db.Document, UserMixin):
    name = db.StringField(max_length=50)
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    city = db.StringField(max_length=125)
    active = db.BooleanField(default=True)
    company =  db.StringField(max_length=255)
    type = db.StringField(max_length=15)
    confirmed_at = db.DateTimeField()
    role = db.ReferenceField(Role)

    meta = {'strict': False}

我还尝试使用

取消设置id属性
cls.objects.update(**{"unset__id": 1})

但它抛出了这个异常,

raise OperationError(u'Update failed (%s)' % unicode(err))
OperationError: Update failed (Mod on _id not allowed)

我只想保存没有id字段的用户模型。

1 个答案:

答案 0 :(得分:2)

如果致电list_indexes(),它会在id字段上显示唯一索引。

您还需要使用db.collection.dropIndex()删除集合中id字段的唯一索引。

我不确定mongoengine是否提供drop_index类方法,但您可以从shell中执行此操作。