notes icon indicating copy to clipboard operation
notes copied to clipboard

MongoDB Exception: $in needs an array

Open lanlin opened this issue 7 years ago • 0 comments

场景

当使用 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 的套路来处理。 城里人套路太深,我确实是看不懂。。。

lanlin avatar Feb 11 '18 08:02 lanlin