PHPからmongoDBに「in」条件を使った問い合わせをしようとして、下記のエラーが発生しました。
error.log
[CRIT] Application error exception 'MongoCursorException' with message '127.0.0.1:27017: Can't canonicalize query: BadValue $in needs an array'
「配列を引数として渡しやがれこのクサレ脳みそがッ!」ということですね。
で、コードはこちら。
hoge.php
$params = [
$user_id => ['$in' => $user_id_array]
];
$cursor = $collection->find($params);
$user_id_array の中身はこうなっていました。
$user_id_array:array (
0 => 10000,
1 => 10001,
2 => 10002,
3 => 10003,
4 => 10004,
8 => 10005,
9 => 10006,
11 => 100000,
12 => 100001,
);
ちゃんと配列を渡していますが、これだとエラーに。
気になったのは配列のキー。array_diffの後だったので、抜けが出ています。
試しに下のように変換。(配列を連番にしました)
$user_id_array = array_merge($user_id_array);
$user_id_array:array (
0 => 10000,
1 => 10001,
2 => 10002,
3 => 10003,
4 => 10004,
5 => 10005,
6 => 10006,
7 => 100000,
8 => 100001,
);
お、エラー出なくなった。正解。
連番でないキーは通常の配列ではなく、連想配列扱いになっているみたいですね。