Python MongoDB Upsert:$仅在更新时设置,不在插入时设置

Python MongoDB Upsert:$仅在更新时设置,不在插入时设置,python,mongodb,pymongo,upsert,Python,Mongodb,Pymongo,Upsert,嗨,我真的很难与MongoDB合作获得插入。我的模式基本上是这样的。我将记录每小时点击的页面。我将记录许多不同的页面,所以效率是重要的。我读到更新比写作效率高很多 { "_id" : "UniqueID:Month", "hits": { "0" : {"0":0, "1":0, ..."23":0}, "1" : {"0":0, "1":0, ..."23":0}, ... "23" : {"0

嗨,我真的很难与MongoDB合作获得插入。我的模式基本上是这样的。我将记录每小时点击的页面。我将记录许多不同的页面,所以效率是重要的。我读到更新比写作效率高很多

{
    "_id" : "UniqueID:Month",
    "hits": { "0" : {"0":0, "1":0, ..."23":0},
              "1" : {"0":0, "1":0, ..."23":0},
              ...
              "23" : {"0":0, "1":0, ..."23":0}
    }
}
当页面不存在时,我想插入完整的模式

"hits": {"0": {"0": 0, "1": 0, "2": 0, "3": 0, "4": 0, "5": 0}}...
当页面确实存在时,只需设置:

 '$set': {"hits": {str(day): {str(hour): page_view}}}
我编写了以下代码:

collection.update(
    {"_id": "UniqueID:" + str(month)},
    {
        '$set': {"hits": {str(day): {str(hour): page_view}}},
        '$setOnInsert': {"hits": {"0": {"0": 0, "1": 0, "2": 0, "3": 0, "4": 0, "5": 0}}}
    },
    True
)
我的问题是,当文档不存在时,它会运行$set和$setOnInsert,这会导致同时更新hits时出错。当文档不存在时,是否有办法只运行$setOnInsert

编辑:我没有将要跟踪的页面的最终列表,因此我无法最初为每个页面创建文档


提前感谢。

这是mongo的一个错误。你必须像我一样解决这个问题,谢谢你设法找到了一个解决办法,只是没有我希望的那么好。希望在未来的版本中,他们能够修复它。phunks-解决方法是什么?