【问题标题】:MongoDB Query Via PHP Driver通过 PHP 驱动程序进行 MongoDB 查询
【发布时间】:2013-01-05 04:06:36
【问题描述】:

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

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

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

但这不会返回任何结果。

对可能出了什么问题的想法?

【问题讨论】:

  • 什么是 MongoID() 函数?是否可以反转 GameID(从 50fde048f1568a204c0002a1 到 3.1677054844223E+18)?
  • 嗯,由于某种未知原因,您的 PHP 驱动程序根本无法识别 objectIds,您的数据库中的文档是什么样的?您可以粘贴控制台输出吗?您的 _id 可能已更改类型,如果是,则您无法通过 objectid 查询
  • @Sammaye 控制台输出是这样的: /* 0 / { "_id" : NumberLong("3292523252251813670"), "league" : "ncaab", "gameTime" : "2013- 01-07T18:30:00”,“homeTeam”:“Cincinnati”,“homeRank”:14,“awayTeam”:“Notre Dame”,“awayRank”:21 } / 1 */ { “_id” :NumberLong(“6877183749884304734”),“联赛”:“ncaab”,“gameTime”:“2013-01-07T19:00:00”,“homeTeam”:“Penn St.”,“awayTeam”:“Indiana”, “离开排名”:5 }

标签: php mongodb


【解决方案1】:

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

您需要使用ObjectIds 来查询它们,因此您不能使用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 更容易。

【讨论】:

  • 谢谢。我必须转移到 linux 64 位 php 环境才能使其正常工作。还建议 monogo 团队使用 objectID。
猜你喜欢
  • 2017-07-14
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多