E11000重复键错误索引pymongo

时间:2016-04-15 14:24:04

标签: python mongodb pymongo

所以有一点背景,我曾在mongodb中使用mongoose.js在node.js中工作过。现在我决定尝试使用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。

1 个答案:

答案 0 :(得分:1)

  

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

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

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

self.collection.index_information()