pymongo重复id错误,而第二次运行相同的代码

时间:2019-11-12 06:39:20

标签: mongodb pymongo

我第一次尝试pymongo,当我尝试在集合中插入数据时,起初它已成功创建,但是当我运行相同的脚本时,它会引发id复制错误。 我读到mongodb / pymongo本身会创建唯一的ID(如果我们不提及的话)。 我想使用id方法的自动生成,这对于繁重的数据库来说似乎很简单并且很好(不是吗?)。 该怎么做?

from pymongo import MongoClient

#step 1: connection

client = MongoClient(port=27017)
db=client["book"]
collection = db["book_booklist"]

#step 2: create sample data
data= {'name':'Great ideas', 'price':'100', 'Author':'gogo','issue_duration':'30'}


value= collection.insert_one(data)
print(value)

错误:第二次尝试 pymongo.errors.DuplicateKeyError:E11000重复键错误集合:book.book_booklist索引: primary_key dup键:{id:null}

2 个答案:

答案 0 :(得分:1)

每次尝试运行脚本时,您都可以尝试在python中手动初始化数据并将数据与ObjectId一起推送。

from pymongo import MongoClient
from bson.objectid import ObjectId

#step 1: connection

client = MongoClient(port=27017)
db=client["book"]
collection = db["book_booklist"]

#step 2: create sample data
data= {'_id': ObjectId(), 'name':'Great ideas', 'price':'100', 'Author':'gogo','issue_duration':'30'}


value= collection.insert_one(data)
print(value)
  

注意:当您安装BSON软件包时,会自动安装pymongo个python模块。

答案 1 :(得分:0)

详细阐述vikscool的评论:

>>> import pymongo
>>> conn = pymongo.MongoClient()
>>> doc = {'x':1, 'y':1, 'z':1}
>>> print(doc)
{'x': 1, 'y': 1, 'z': 1}
>>> conn.test.test.insert_one(doc)
<pymongo.results.InsertOneResult object at 0x1075a2410>
>>> print(doc)
{'x': 1, 'y': 1, 'z': 1, '_id': ObjectId('5dcb4293a6d58c694795bc9d')}

请注意,doc已通过insert_one()方法进行了突变。它添加了_id字段,因此当您尝试再次插入它时,它将抱怨重复的_id