MongoDB中的Upsert导致通过pymongo重复插入

时间:2015-08-06 04:42:02

标签: python mongodb pymongo

我试图在MongoDB中使用upserts。出于某种原因,pymongo.Collection.update方法在应该更新预先存在的文档时插入新文档(<每次)。

这是我的代码:

print self.visitorCollection.find({"ip": user_ip, "userAgent": user_agent}).count()
self.visitorCollection.update(
        {"ip": user_ip, "userAgent": user_agent},
        {"$set": {"last_request": currentTime}, "$inc": {"requests": 1}, "$setOnInsert": {"first_request": currentTime, "userAgent": user_agent}},
        upsert = True
        ) # currently not working properly

当集成到我的Flask应用程序中时,这是我收到的输出:

12
13
14

正如您所看到的,即使它只是更新原始文件,也会不断添加新文档。

我很欣赏任何有关此事的见解!

编辑:事实证明,此代码正常运行且无法再现错误 - 这是由我的应用程序中未显示的其他代码引起的

1 个答案:

答案 0 :(得分:1)

您在查询中有upsert: True,如果没有文档与过滤器匹配,upsert: True mongo执行插入时。

引用documentation

<强> UPSERT

  

可选。如果设置为true,则在没有文档与查询条件匹配时创建新文档。默认值为false,如果未找到匹配项,则不会插入新文档。