Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Mongodb中取消显示重复密钥错误消息中的字段_Php_Mongodb - Fatal编程技术网

Php 如何在Mongodb中取消显示重复密钥错误消息中的字段

Php 如何在Mongodb中取消显示重复密钥错误消息中的字段,php,mongodb,Php,Mongodb,我使用这两个地址作为城市字段作为唯一的复合索引。导入CSV时,我使用upsert进行批量更新。因此,将更新现有关键帧,并插入不存在的关键帧 由于排序规则设置(例如“Amsterdam”和“Amsterdam”是相同的),我得到了重复的键错误 我正在努力破译错误信息。这是我收到的一条示例消息: E11000重复键错误集合:数据库。集合索引:c_地址排序:{locale:“nl”,caseLevel:false,caseFirst:“off”,强度:1,数字排序:false,可选:“不可忽略”,ma

我使用这两个地址作为城市字段作为唯一的复合索引。导入CSV时,我使用upsert进行批量更新。因此,将更新现有关键帧,并插入不存在的关键帧

由于排序规则设置(例如“Amsterdam”和“Amsterdam”是相同的),我得到了重复的键错误

我正在努力破译错误信息。这是我收到的一条示例消息:
E11000重复键错误集合:数据库。集合索引:c_地址排序:{locale:“nl”,caseLevel:false,caseFirst:“off”,强度:1,数字排序:false,可选:“不可忽略”,maxVariable:“punt”,规范化:false,向后:false,版本:“57.1”}重复键:{地址:“0x3f313f39314d4f4f4b29294f0414”,城市:“0x31434D2D373312F31”}

最相关的部分包括:
{地址:“0x3f313f39314d4f4b29294f041414”,城市:“0x31434D2D373312F31”}

我发现MongoDB十六进制编码消息,因为否则驱动程序将返回无效的UTF-8。 资料来源:

我想用PHP解码十六进制字符串。 解码3f313f39314d4f4b29294f041414将给我:?1?91MOK)O

我想这是UTF8编码的问题。我也试着用BSON解码,结果是:“1CM-71/1”


我想让这本书可读,这样我就可以检查哪些键出了问题。

我至少找到了防止这一错误的方法。如果创建集合,则可以设置默认排序规则。您必须在创建时这样做,因为以后无法修改它。索引也有排序规则。对于默认排序规则集,使用“amsterdam”或“amsterdam”并不重要。两者都能正确更新正确的文档,而不会引发重复的密钥错误。我仍然对如何使原始错误可读感兴趣。
$dehex = hex2bin("31434d2d37312f31");
$dehex = iconv('UTF-8', 'UTF-8//TRANSLIT', $dehex);
$binary = new MongoDB\BSON\Binary($dehex, MongoDB\BSON\Binary::TYPE_GENERIC);
var_dump($binary->getData());