2013-01-22 135 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

相關問題