[pymongo获取E11000重复键错误索引pymongo错误

问题描述 投票:2回答:1

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

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: database.emails.$email_1 dup key: { : "[email protected]" }

我一直在互联网上寻找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":"[email protected]", "name":"bob"})

如果数据库中没有文档,则可以插入。但是,如果我尝试再次插入相同的内容,则会得到DuplicateKeyError。好像MongoDB期望所有字段都具有唯一性,还是我误会了这些过程?

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

python mongodb pymongo
1个回答
2
投票

pymongo.errors.DuplicateKeyError:E11000重复键错误索引:database.emails。$ email_1 dup键:{:“ [email protected]”}

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

FYI,您可以使用index_information()方法获取索引信息:

index_information()
© www.soinside.com 2019 - 2024. All rights reserved.