shisgmei 发表于 2017-12-16 07:30:51

解决 mongodb $in needs an array 问题

This... is a change in MongoDB 2.6.0, no longer accepting bson object in the $in clause.  

  
This particular issue is being tracker
as a PHP driver bug at https://jira.mongodb.org/browse/PHP-1051  

  
The MongoDB PHP Driver willan PHP Array into BSON Array (accepted by the $in operator) when the PHP array is: Sequential numerically indexed, starting from 0
  

  
This means that if you have an array like:
  

  
$array = array($id0, $id1, $id2, $id3, $id4);
  
and then you
  

  
unset($array);
  
You actually wind up with:
  

  
$array = array(1 => $id1, 2 => $id2, 3 => $id3, 4 => $id);
  
Which does not start with index 0. The MongoDB PHP driver therefore converts this into a BSON Object... Leading to validation error in MongoDB as it expected an array.
  

  
Now, since the MongoDB PHP driver does not do parse your MongoDB query we cannot know which array should be exempted from this serialization rule.
  

  
The workaround is, as mentioned above, is to ensure your PHP arrays are numerically indexed, starting from 0. The easiest way to do that is to run
  

  
($values);
页: [1]
查看完整版本: 解决 mongodb $in needs an array 问题