Python upsert返回E11000

Python upsert返回E11000,python,mongodb,Python,Mongodb,全部 我有大约200万条JSON文件中的记录,需要将这些记录推送到MongoDB中。但是,其中一些记录是重复的,即使我执行了update+upsert,它仍会不断给我一个E11000重复密钥错误。在重复匹配_id时,我希望更新正文的其余部分。如果没有重复,则只需插入记录 我在Python中的调用是: self.collection.update({ 'pid': doc['_id']['pid'], 'car': doc['_id']['car'], 'model': d

全部

我有大约200万条JSON文件中的记录,需要将这些记录推送到MongoDB中。但是,其中一些记录是重复的,即使我执行了update+upsert,它仍会不断给我一个E11000重复密钥错误。在重复匹配_id时,我希望更新正文的其余部分。如果没有重复,则只需插入记录

我在Python中的调用是:

self.collection.update({
    'pid': doc['_id']['pid'],
    'car': doc['_id']['car'],
    'model': doc['_id']['model'],
    'mid': doc['_id']['mid'],
}, doc, upsert=True)
*(文档包含_id)

基本上,
\u id
包括:

{
    "pid" : "9778554",
    "car" : "7111115",
    "model" : "9461284",
    "mid" : "9445321"
}
身体跟随id。关于我应该做什么/我做错了什么,有什么建议吗?谢谢


(我正在使用pymongo)

我发现您的update查询子句中缺少\u id。您正在通过不属于_id的键进行查询,我认为假设这些字段可以是!=_id objectThank you@aks-我应该改为
self.collection.update({“\u id”:part[“\u id”]},part,upsert=True)
?你可以做的另一件事是插入所有记录,然后索引并删除重复项:db.collection.ensureIndex({a:1},{unique:True,dropDups:True})我最后做了上述工作(张贴aks评论)这很管用,但感谢@user602525提供了另一种方法。