【问题标题】:pymongo getting E11000 duplicate key error index pymongo errorpymongo获取E11000重复键错误索引pymongo错误
【发布时间】:2016-04-15 14:24:04
【问题描述】:

所以有一点背景,我之前在 node.js 和 mongoose.js 中使用过 MongoDB。现在我决定尝试使用 python 和 pymongo。但是当我尝试将一个文档插入我的集合时,我得到了一个错误:

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: database.emails.$email_1 dup key: { : "mail@example.com" }

我一直在互联网上寻找 Python 和其他语言的解决方案。很可能是那种感觉 iv 之前只使用 mongoose.js 与 mongo 对话,而我可能没有完全掌握 MongoDB 的基础知识。

来自model.py

from pymongo import MongoClient

class Model(object):
    client = MongoClient()
    db = client["database"]
    collection_name = ""

    def __init__(self):
        self.collection = self.db[self.collection_name]

    def save(self, data):
        self.collection.insert_one(data)

来自 Post.py

from model import Model

class Post(Model):

    collection_name = "emails"

    def __init__(self):
        super(Post, self).__init__()

在 app.py 中我只是这样做

from models.Post import Post

post = Post()
post.save({"email":"mail@example.com", "name":"bob"})

当数据库中没有文档时,它会很好地插入。但是如果我尝试再次插入相同的内容,我会得到 DuplicateKeyError。好像 MongoDB 期望所有字段都具有唯一性,还是我误解了流程?

我正在使用最新版本的 pymongo。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    pymongo.errors.DuplicateKeyError: E11000 重复键错误索引:database.emails.$email_1 dup key: { : "mail@example.com" }

    根据错误判断,您实际上为email 字段定义了一个唯一索引。

    仅供参考,您可以使用index_information() 方法获取索引信息:

    self.collection.index_information()
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2016-10-31
    • 2019-07-11
    • 1970-01-01
    • 2014-01-06
    • 2020-09-12
    • 2017-01-03
    相关资源
    最近更新 更多