2013-01-22 127 views
0

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

我使用查询数据:

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

但是这不会返回任何结果。

关于可能出错的想法?

+0

什么是MongoID()函数?是否可以反转GameID(从50fde048f1568a204c0002a1到3.1677054844223E + 18)? –

+0

嗯,你的PHP驱动程序根本不会识别'objectId's,文档在你的数据库中看起来是什么?你能粘贴一个控制台输出吗?您的_id可能已经改变类型,如果是这样,那么你不能通过objectid – Sammaye

+0

@Sammaye查询控制台输出是这样的:/ * 0 */ { “_id”:NumberLong(“3292523252251813670”), “league”:“ncaab ”, “gameTime”: “2013-01-07T18:30:00”, “homeTeam”: “辛辛那提”, “homeRank”:14, “awayTeam”: “圣母”, “awayRank”: 21 } /* 1 */{ “_id”:NumberLong( “6877183749884304734”), “联赛”: “NCAAB”, “gameTime”: “2013-01-07T19:00:00”, “homeTeam”:“Penn St.”, “awayTeam”:“Indiana”, “awayRank”:5 } – esimran

回答

1

是的,有人已经摆弄你的ObjectId s,他们不再ObjectIds

您需要使用ObjectId才能查询,因此您无法通过ObjectId(PHP中的MongoId)查询。

你应该能够查询,而无需虽然因为在MongoId包装图,如果你有native_long设置在php.ini:http://php.net/manual/en/mongo.configuration.php#ini.mongo.native-long(这是默认的更新的驱动程序我bellieve),驱动程序自动应转换为NumberLongs来回。

因此,仅仅通过$result['_id']查询,而不会将其放入MongoId

虽然使用_id并不是那么好,但我会建议您使用ObjectIdMongoId在PHP中)重新填充所有记录,因为这样做比使用_id更加高效和容易您目前使用的ID。

+0

谢谢。我不得不转移到一个Linux 64位PHP env才能正常工作。还建议monogo团队使用objectID。 – esimran

相关问题