Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB为重复文档生成相同的ObjectID_Mongodb_Jupyter Notebook_Pymongo - Fatal编程技术网

MongoDB为重复文档生成相同的ObjectID

MongoDB为重复文档生成相同的ObjectID,mongodb,jupyter-notebook,pymongo,Mongodb,Jupyter Notebook,Pymongo,我是MongoDB的新手,在Jupyter笔记本中使用Pymongo。第一次插入文档时,它工作正常。插入同一文档(重新运行同一jupyter单元格)时,我会得到一个“DuplicateKeyError:E11000 duplicate key error index” 当我再次实例化同一个用户对象时,它可以很好地插入。我也是新手。我试图理解为什么会发生这种错误 我的理解是Mongo基于时间和随机性创建了OjbectID。这就好像ObjectID是基于我的对象被实例化的时间 class User:

我是MongoDB的新手,在Jupyter笔记本中使用Pymongo。第一次插入文档时,它工作正常。插入同一文档(重新运行同一jupyter单元格)时,我会得到一个“DuplicateKeyError:E11000 duplicate key error index”

当我再次实例化同一个用户对象时,它可以很好地插入。我也是新手。我试图理解为什么会发生这种错误

我的理解是Mongo基于时间和随机性创建了OjbectID。这就好像ObjectID是基于我的对象被实例化的时间

class User:
    def __init__(self, email, password, username=None, image_file=None):
        self.email = email
        self.password = password
        self.username = username
        self.image_file = image_file

        self.newUser= f"""{{"email":"{self.email}",
                        "password":"{self.password}", 
                        "username": "{self.username}",
                        "image_file": "{self.image_file}"}}"""
        self.jsonDoc = json.loads(self.newUser)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', 
                      '{self.image_file}')"

jim = User("xx2", "password")
mongo.db.users.insert_one(jim.jsonDoc)
预期行为:每次重新运行单元格时创建一个新文档和唯一的ObjectID


实际行为:第一次运行单元格时起作用。第二次运行时出错。如果再次调用用户类(使用相同的信息),它将工作

出现此错误的原因是,您试图插入一个新文档,该文档的索引键(其中索引键标记为唯一)的值已存在于MongoDB中的一个文档中

如果未明确索引任何键,则插入时必须在文档中包含“\u id”字段,并且“\u id”字段的值必须与先前插入的文档的值相同

请浏览以下连结:


能否粘贴获得重复密钥错误所依据的代码?此外,集合是否在某些字段上建立索引?