mongodb - mongoengine 唯一约束

标签 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

为什么

最佳答案

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

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

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

关于mongodb - mongoengine 唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24524313/

相关文章:

javascript - sails -mongo : many to many relationship is not working in my app. 按照文档仍然给出空数组

MongoDB:通过不存在的字段查找文档?

macos - Python 虚拟环境,Py2app 构建,wxpython 错误

ruby - 无法批量分配 protected 属性 - 它是 attr_accessor 中的批量分配字段

node.js - 如何以指定的时间间隔自动运行 Node 脚本

c# - 如何在 C# mongo 驱动程序中设置复数集合名称?

python - 在附加模式下,我的文件是否在 RAM 中打开?

python - 匹配 Python 字典

ruby-on-rails - 救援中的 DRY 代码 => Rails 中各种模型文件中的 e

zend-framework - 如何使用 Zend 框架从模型中获取请求对象。