LoginSignup
0
0

More than 5 years have passed since last update.

mongoDBのfindにinを指定するときの引数で罠った

Posted at

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,
);

お、エラー出なくなった。正解。
連番でないキーは通常の配列ではなく、連想配列扱いになっているみたいですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0