在我的pymongo代码中,插入两次相同的doc会引发错误:
document = {"auteur" : "romain",
"text" : "premier post",
"tag" : "test2",
"date" : datetime.datetime.utcnow()}
collection.insert_one(document)
collection.insert_one(document)
加注:
DuplicateKeyError: E11000 duplicate key error collection: test.myCollection index: _id_ dup key: { : ObjectId('5aa282eff1dba231beada9e3') }
插入两个包含不同内容的文档可以正常工作。
似乎根据https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#options我应该做一些索引选项:
unique boolean
Optional. Creates a unique index so that the collection will not accept insertion or update of documents where the index key value matches an existing value in the index.
Specify true to create a unique index. The default value is false.
The option is unavailable for hashed indexes.
答案 0 :(得分:2)
添加到Peba的答案,您可以使用python字典的.copy()
方法来避免文档本身的变异。
document = {"auteur" : "romain",
"text" : "premier post",
"tag" : "test2",
"date" : datetime.datetime.utcnow()}
collection.insert_one(document.copy())
collection.insert_one(document.copy())
这样,每个insert_one
调用都是document
的浅表副本,同时保持代码更加pythonic。
答案 1 :(得分:1)
插入文档会隐式生成_id
。
因此,在插入文档后,它将变异为
document = {"_id" : ObjectId('random_id_here'),
"auteur" : "romain",
"text" : "premier post",
"tag" : "test2",
"date" : datetime.datetime.utcnow()}
由于重复的_id
,尝试再次插入所述文档会导致错误。
您可以使用相同的值创建新文档并将其插入。
document = {"auteur" : "romain",
"text" : "premier post",
"tag" : "test2",
"date" : datetime.datetime.utcnow()}
collection.insert_one(document)
document = {"auteur" : "romain",
"text" : "premier post",
"tag" : "test2",
"date" : datetime.datetime.utcnow()}
collection.insert_one(document)