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 を float から次の値に変換します: 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ではありませんObjectIds

s を使用してクエリを実行する必要があるため、 ( PHP では) でObjectIdクエリを実行することはできません。ObjectIdMongoId

ただし、php.ini で設定してMongoIdいる場合は、図をラップせずにクエリを実行できるはずです: http://php.net/manual/en/mongo.configuration.php#ini.mongo.native-long(私が信じている新しいドライバーではデフォルトでそうです)、ドライバーは自動的に前後に変換する必要があります。native_longNumberLongs

$result['_id']したがって、文字通り、に入れずに でクエリするだけMongoIdです。

ただし、_id を使用すると、実際にはあまり良くないので、ObjectId( MongoIdPHP で) を使用してすべてのレコードを再入力することをお勧めします。これは、現在使用している ID よりもはるかに効率的で簡単になるためです。

于 2013-01-22T21:05:02.227 に答える