php - Mongodb中重复键错误消息中的unhex字段如何
问题描述
我将两个地址都用作城市字段作为唯一的复合索引。当我导入 CSV 时,我会使用 upsert 进行批量更新。因此现有的密钥得到更新,不存在的密钥被插入。
由于排序规则设置(例如“Amsterdam”和“amsterdam”相同),我得到重复的键错误。
我很难解码错误信息。这是我收到的示例消息:
E11000 duplicate key error collection: database.collection index: c_address collation: { locale: "nl", caseLevel: false, caseFirst: "off", strength: 1, numericOrdering: false, alternate: "non-ignorable", maxVariable: "punct", normalization: false, backwards: false, version: "57.1" } dup key: { address: "0x3f313f39314d4f4b29294f041414", city: "0x31434d2d37312f31" }
与最相关的部分:
{ address: "0x3f313f39314d4f4b29294f041414", city: "0x31434d2d37312f31" }
我发现 MongoDB 十六进制编码消息,否则驱动程序将返回无效的 UTF-8。 https://jira.mongodb.org/browse/SERVER-46810 来源: https ://github.com/mongodb/mongo/commit/0e8998afb31300f39bc63af4a745a437b07ff977
我想用 PHP 解码十六进制字符串。解码 3f313f39314d4f4b29294f041414 会给我:?1?91MOK))O。
我认为这是一些 UTF8 编码问题。我也尝试用 BSON 解码它,它给出:“1CM-71/1”
$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());
我想让这个人类可读,这样我就可以检查哪些键有问题。
解决方案
推荐阅读
- excel - 无法在 vba excel 中将项目添加到组合框(表单控件)
- android - 未解析的引用,无法访问类
- python - 查询 SQL Server 数据库时,结果对象不返回行
- php - 将 Laravel 5.4 升级到最新版本 (5.7)
- ios - Flutter Tar:无法在 android studio IOS 中设置默认语言环境
- mysql - MySQL 创建表 IF NOT EXISTS 语法错误
- java - 邮件正文有标题和部分信息
- wordpress - 如何删除在wordpress上注入的脚本
- android - React Native 键盘事件不适用于 android:windowSoftInputMode="adjustNothing"
- android - 如何将数据片段传递给android studio中的其他片段活动