2015-07-13 1 views
0

У меня есть Page модель как следует и page_id поле не unique, но я не могу создать экземпляр из Page и эта ошибка возрастает
OperationError: Could not save document (insertDocument :: caused by ::11000 E11000 duplicate key error index: shopify.page.$pageId_1 dup key: { : null }) Я понятия не имею, что почему дубликат ошибка ключ повышается, когда page_id поле не unique

Site модель:
дубликат ключа индекса ошибки в mongoengine

class Page(Document): 

    # page identity 
    page_id = StringField() 
    store = ReferenceField('Store') 
    is_product = BooleanField(default = False) 
    is_homepage = BooleanField(default = False) 
    product = ReferenceField('Product') 
    requests = ListField(EmbeddedDocumentField('Request')) 

    # page stat 
    visitors = IntField(default = 0) 
    views = IntField(default = 0) 
    past_days = ListField(EmbeddedDocumentField('DayStat')) 
+0

Таким образом, вы определили «уникальный» ключ в поле. Если не в определении класса, то где-то еще по внешнему скрипту. Возможно, вы должны использовать 'required' в качестве аргумента на' page_id', поскольку, похоже, вы предоставили новый объект без определения значения для этого поля. И «дважды». Следовательно, дубликат. –

+0

@BlakesSeven в начале я использовал 'required' как аргумент' page_id' , но это не влияет на результат! – MDK

+0

Умм. Я сам использую Mongoengine в различных проектах. ["Поля"] (http://docs.mongoengine.org/en/latest/apireference.html#fields) показывает все допустимые параметры. i.e 'page_id = StringField (обязательно = True)'. Но, как я уже сказал, у вас уже есть «уникальное» определение индекса, а другой элемент вставлен в это поле как «null». Вам нужно найти этот документ и внести в него изменения. Много документации по сопоставлению нулевых полей. –

ответ

0

Это просто из-за какого-то старого Document в базе данных, который в прошлом имел разные поля и когда новые изменения применялись из-за разных объектов, введите Collection, когда функция работает неспособно распознать тип объекта поля и спуститься!
Одно решение оставляет Collection, и если ваш Collection слишком важен, вы можете написать сценарий, который удаляет старые объекты и выдает им новый экземпляр.