通过PHP驱动程序进行MongoDB查询

时间:2013-01-22 00:54:47

标签: php mongodb

我正在使用运行PHP 5.4的Windows xampp服务器和PHP Mongo驱动程序from here

我使用以下方式查询数据:

$results = $collection->find( array('league'=>'nba') );
  foreach ($results as $user) {
      var_dump($user);
      echo "</br>";
  }

结果:

array(5) { ["_id"]=> float(3.1677054844223E+18) ["league"]=> string(3) "nba" ["homeTeam"]=> string(10) "Washington" ...

我正在将ID转换为字符串:

$cursorID = new MongoID($result['_id']);
$gameLink = "<a href='/home/game/".$cursorID."'>".$cursorID."</a>";

将浮点数的ID转换为此值:50fde048f1568a204c0002a1 并试图查询游戏细节:

$gameID = new MongoID("50fde048f1568a204c0002a1"); //default
$con = new Mongo("mongodb://mongo.example.net"); // Connect to Mongo Server
$db = $con->selectDB('mydb');
$games = $db->games->find( array('_id'=>$gameID) );

但这不会返回任何结果。

关于可能出现什么问题的想法?

1 个答案:

答案 0 :(得分:1)

是的,有些人一直在摆弄你的ObjectId,他们不再是ObjectIds

您需要使用ObjectId来查询它们,因此您无法通过ObjectId(PHP中的MongoId)进行查询。

你应该能够查询而不将图形包装在MongoId中,但是,如果你在php.ini中设置了native_longhttp://php.net/manual/en/mongo.configuration.php#ini.mongo.native-long(默认情况下是我鼓掌的新手司机,司机应该为你自动转换NumberLongs

因此,只需$result['_id']查询而不将其放入MongoId

但请注意,使用_id你并不是那么好,我建议你再次使用ObjectId(PHP中的MongoId)重新填充所有记录,因为这将是一个比你目前使用的ID更有效,更容易。