0

我正在使用运行 PHP 5.4 的 windows xampp 服务器和来自此处的 PHP Mongo 驱动程序。

我正在使用以下方法查询数据:

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

但这不会返回任何结果。

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

4

1 回答 1

1

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

您需要使用ObjectIds 来查询它们,因此您不能通过ObjectId (MongoId在 PHP 中) 查询。

你应该能够在不包装图形的情况下进行查询,MongoId因为如果你native_long在你的 php.ini 中设置了:http: //php.net/manual/en/mongo.configuration.php#ini.mongo.native-long(默认情况下在我相信的较新的驱动程序中),驱动程序应该自动NumberLongs为您来回转换。

因此,从字面上看,只需通过查询,$result['_id']而不将其放入MongoId.

不过需要注意的是,使用 _id 并不是那么好,我建议您再次使用ObjectId(MongoId在 PHP 中) 重新填充所有记录,因为这将比您当前使用的 ID 更有效和更容易。

于 2013-01-22T21:05:02.227 回答