notes
notes copied to clipboard
MongoDB Exception: $in needs an array
场景
当使用 MongoDB PHP Driver 进行 $in 查询时,经常会碰到该错误。
问题分析:
我们经常会进行类似的条件查询
$arrs = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'a', 4 => 'd'];
$arrs = array_unique($arrs); // 结果 [0 => 'a', 1 => 'b', 2 => 'c', 4 => 'd']
$where = ['xxx' => ['$in' => $arrs]]
上述情形下,就会出现 $in needs an array 的错误。
主要原因在于,数组的数字索引为非连续的,MongoDB 在解析时会将其当做对象来处理。
而不是当做数组来处理。
Stack Overflow 相同问题 详见 MongoDB Bug 追踪
解决办法
既然找到原因了,解决方式就太多了。
$arrs = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'a', 4 => 'd'];
$arrs = array_unique($arrs); // 结果 [0 => 'a', 1 => 'b', 2 => 'c', 4 => 'd']
$arrs = array_values($arrs); // 结果 [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd']
$where = ['xxx' => ['$in' => $arrs]]
曰
神奇的包谷粑!叫做 PHP Driver 的东西不按 PHP 的套路来处理。 城里人套路太深,我确实是看不懂。。。