如标题,在执行数据更新时,如果存在数据,则更新文档,不存在,则插入这个新文档。
本人在python3.6.3下使用pymongo 3.7.2进行操作。
q_filter= {"_id": “id”}
collection.update_one(q_filter, {"$set": mydict}, upsert= True)
{ } does not contain shard key for pattern { InletID: 1.0, _id: 1.0 }
说是没有包含这个shard key这个鬼东西。网上解释的很多,没有看很懂,有些说修改这个shard key,修改需要将集合导出,然后设置这个key,再导入就可以了。
对于小数据量可以试一试,但是我的数据太大了,没有去试了。
后来随意测试,把错误信息中报出来的字段添加到查询语句中,也就是上面的q_filter中,然后执行就成功了,貌似是这个集合把_id和InletID共同作为shard key了,查询语句中要包含所有的字段,才能正常执行。
个人解释,有详细解释还望告知。