【发布时间】:2018-09-09 13:48:47
【问题描述】:
我正在尝试将相对大量的数据存储到 MongoDB 中,使用 BulkWrite 进行多次插入。数据来自外部资源,所以我无法完全控制它的内容。单次批量操作的数据记录量可达15k甚至更多。这是我的代码的一部分:
$bulk = new BulkWrite();
foreach ($data as $id => $item) {
$bulk->update(
['id' => $item['id']],
$item,
['upsert' => true]
);
}
try {
$result = $mongo->getManager()->executeBulkWrite(
'db.collection',
$bulk,
new WriteConcern(WriteConcern::MAJORITY)
);
} catch (\MongoDB\Driver\Exception\UnexpectedValueException $e) {
// we have a problem here
}
我有时会遇到这样的异常:
[MongoDB\Driver\Exception\UnexpectedValueException] 得到无效的 UTF-8 值序列化 '�8'
我不想过滤所有这些数据,因为它会影响性能。是否可以获得发生此异常的确切记录?据我所知,UnexpectedValueException 对象不提供此数据,它之前的异常也是UnexpectedValueException。
【问题讨论】:
-
嗯我对MongoDB了解不多,但也许是排序规则的问题?有些字符仅存在于 utf8mb4 中(每个字符 4 个字节),例如啤酒杯。
-
@Blackbam 感谢您的关注,但问题是我无法从整个插入的列表中精确检测到该符号所在的确切数据记录。但我从来不知道啤酒杯,这很有趣:)
-
谢谢@Martin,我会检查的。
标签: php mongodb bulkinsert bulkupdate