我第一次尝试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}
答案 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
。