首页 > 解决方案 > Mongodb 无法使用“在键中找到缺失值”对集合进行分片

问题描述

在这方面需要快速帮助。对于我的一生,我无法弄清楚为什么 MongoDB 无法对集合进行分片,并指出给定的分片键有一个空值。

我正在尝试根据文档中的第一个标签元素创建分片,因此键是标签 [0]。为了澄清,在这种情况下,我指向的值是“fc4f03a4-0f7b-5cf4-af4e-8b38377a9e34”。

mongos> sh.shardCollection("mydb.logs", { "tags[0]": 1 } );
{
"ok" : 0,
"errmsg" : "found missing value in key { : null } for doc: { _id: \"8f0f90bd-e63e-521f-a637-b773f3eefdf0\", tags: [ \"fc4f03a4-0f7b-5cf4-af4e-8b38377a9e34\", \"Converter\" ], date: new Date(1531180801464), account: \"1aff2ce3-b510-525a-86ff-e379fac03f8c\", data: \"Converter has been initialized.\", __v: 0 }"
}

显然,tags[0] 不为空。为什么 MongoDB 会这样?

标签: mongodbsharding

解决方案


将其更改为点符号有效。

mongos> sh.shardCollection("mydb.logs", { "tags.0": 1 } );

不过,我仍然不确定为什么它不接受第一个符号 []。


推荐阅读