【问题标题】:pymongo duplicate id error while running same code second time第二次运行相同代码时pymongo重复ID错误
【发布时间】:2020-03-07 20:16:47
【问题描述】:

我第一次尝试 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 duplicate key error collection: book.book_booklist index: primary_key dup key: { id: null }

【问题讨论】:

  • 根据pymongo,每次插入操作都会将一个特殊键_id附加到原始对象引用Insert Document。因此,最好清除_id 键的值(如果您尝试重新插入同一个文档)。更多关于null重复值MongoDB show duplicate key is null?

标签: mongodb pymongo


【解决方案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)

注意:安装pymongo 包时,会自动安装python 的BSON 模块。

【讨论】:

    【解决方案2】:

    详细说明 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多