【问题标题】:duplicate key error index in mongoenginemongoengine中的重复键错误索引
【发布时间】:2015-10-01 14:57:40
【问题描述】:

我有一个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 型号:

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'))

【问题讨论】:

  • 所以您已经在字段上定义了一个“唯一”键。如果不在类定义中,则通过外部脚本在其他地方。您可能应该使用required 作为page_id 的参数,因为您似乎提供了一个新对象而没有为该字段定义值。和“两次”。因此重复。
  • @BlakesSeven 一开始我使用required 作为page_id 的参数,但它对结果没有任何影响!
  • 嗯。我自己在各种项目中使用 Mongoengine。 "Fields" 显示所有有效选项。即page_id = StringField(required=True)。但正如我所说,您已经有一个“唯一”索引定义和另一个插入该字段的项目为null。您需要找到该文件并对其进行修改。大量关于匹配空字段的文档。
  • 这个模型有没有可能除了我写的字段还有其他字段!除了 mongoid 字段,因为错误提到 pageId_1 是问题,而 page_id 过去是 pageId @BlakesSeven
  • l“索引名称”和“字段名称”不一定是同一个东西。我可以从您的类定义中看到您没有在那里定义索引。它是在外部创建的。看看page_id 没有默认值,抱怨“重复”索引已经是null?从逻辑上讲,这表明该领域是问题所在。检查“索引”定义或询问团队中知道如何执行此操作的人员。或在线搜索。

标签: mongodb mongoengine


【解决方案1】:

是的,我还从字段属性中删除了 unique=True,然后删除了 Collection 并再次运行代码。这解决了问题。

【讨论】:

    【解决方案2】:

    这只是因为数据库中的一些旧Document 过去有不同的字段,并且当由于Collection 中的不同对象类型而应用新更改时,运行它的函数无法识别字段对象的类型和下去 !
    一种解决方案是删除Collection,如果您的Collection 太重要,您可以编写一个脚本来删除旧对象并从中创建一个新实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 2020-09-29
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多