python - MongoDB插入引发重复键错误

标签 python mongodb pymongo database

尝试批量插入 empty mongodb 集合时出现以下错误。

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: cmdDistros.locDistro.$id dup key: { : ObjectId('51dac9d0c74cd81acd85c0fd') }

我在创建任何文档时都没有指定 _id,所以 mongodb 应该正确创建唯一索引吗?这是我使用的代码:

#Populate database with uniform distribution
            entries = []
            for coor in freeIndices:
                for theta in range(360):
                    entry = {"x" : coor[0], "y" : coor[1], "heading" : theta}
                    for i in range(numData):
                            entry["data" + str(i)] = 1./numData
                    entries.append(entry)
            print "Entries created, loading into database..."

            locDistro.insert(entries)

从 mongoDB 手中夺走命运,我尝试使用以下方法创建自己的索引:

#Populate database with uniform distribution
            entries = []
            idNum = 0
            for coor in freeIndices:
                for theta in range(360):
                    print idNum
                    entry = {"_id" : idNum, "x" : coor[0], "y" : coor[1], "heading" : theta}
                    idNum += 1
                    for i in range(numData):
                            entry["data" + str(i)] = 1./numData
                    entries.append(entry)
            print "Entries created, loading into database..."

            locDistro.insert(entries, manipulate = False)

打印语句显示文档创建时的每个 idnum,它们都是唯一的,并且按预期递增。但是在插入时,我收到了错误:

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: cmdDistros.locDistro.$id dup key: { : 0 }

只有一个文档被插入到我的数据库中。

我完全被难住了,有人知道为什么会发生这种情况吗?

最佳答案

您需要了解您的条目列表有一堆对 one 条目字典的引用。因此,当 PyMongo 设置条目[0]['_id'] 时,所有其他条目都会获得相同的 _id。 (事实上​​,PyMongo 将遍历设置每个条目的 _id 的列表,因此所有条目的末尾都会有 final _id。)快速解决方法是:

entries.append(entry.copy())

这只是一个浅拷贝,但在您分享的代码中,我相信这足以解决您的问题。

关于python - MongoDB插入引发重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529216/

相关文章:

Python, Pandas 数据框。 pd.fillna() 用于具有特定值的特定列

python - 使用 python 从基于 DataFrame 的 2 个向量的函数创建一个新字段

mongodb - ECONNREFUSED MongoDB 在 kubernetes 集群中运行

mongodb - 这两个 MongoDB 查询有什么区别?

python - MongoDB 连接错误 : object has no attribute 'getitem'

python - Django 提示查询必须在子查询中使用,当它在子查询中使用时

python - 在 Tkinter 中获取默认字体

java.lang.NoSuchMethodError : com. mongodb.MongoClient.<init>(Ljava/util/List;Lcom/mongodb/MongoCredential;Lcom/mongodb/MongoClientOptions;)V]

mongodb - Meteor 应用程序定期崩溃并出现 Mongo 错误

python - Mongo UUID python vs java 格式