mongo does not contain shard key

  如标题,在执行数据更新时,如果存在数据,则更新文档,不存在,则插入这个新文档。

  本人在python3.6.3下使用pymongo 3.7.2进行操作。

q_filter= {"_id": “id”}
collection.update_one(q_filter, {"$set": mydict}, upsert= True)
  将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了,查询语句中要包含所有的字段,才能正常执行。
  个人解释,有详细解释还望告知。
posted @ 2019-08-13 14:46  Black兔斯基  阅读(1590)  评论(0编辑  收藏  举报