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

问题描述:

我不断收到上述错误。我删除了已设置为唯一的现有数据库字段id。但在保存我得到了下面的异常NotUniqueError:试图保存重复的唯一键

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字段的用户模型。

+0

什么是UserMixin类? – sergiuz

+0

它来自flask.ext.security的flask_security包'import UserMixin' –

如果调用list_indexes()它会显示在id领域的唯一指标。

您需要为使用db.collection.dropIndex()以及下降的唯一索引上id领域的收藏。

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