Find a document with ObjectID in mongoDB Find a document with ObjectID in mongoDB mongodb mongodb

Find a document with ObjectID in mongoDB


Pretty sure you have to use a MongoId object, eg

$item = $collection->findOne(array(    '_id' => new MongoId('4e49fd8269fd873c0a000000')));

The notes on the Querying page are a little obtuse but it does mention...

Unless the user has specified otherwise, the _id field is a MongoId. The most common mistake is attepting to use a string to match a MongoId. Keep in mind that these are two different datatypes, and will not match each other in the same way that the string "array()" is not the same as an empty array


I think now the API changes to MongoDB\BSON\ObjectID, also you can use [] to denote an array in PHP 5.4+, so it should be:

$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);

based on Phil's answer.


For MongoDB\Driver\Manager, a modern version of a MongoDB, you might consider the following working code:

try {  $DB_CONNECTION_STRING="mongodb://YourCredentials";  require '../../vendor/autoload.php';  $manager = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );  $filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];  $options = [];  $query = new MongoDB\Driver\Query($filter, $options);       $docs = $manager->executeQuery('YourDbName.YourCollectionName', $query);}catch (MongoDB\Driver\Exception\Exception $e) {   $filename = basename(__FILE__);   echo "The $filename script has experienced an error.\n";   echo "It failed with the following exception:\n";   echo "Exception:", $e->getMessage(), "\n"; } 

For testing purposes:

foreach ($docs as $doc) {  print_r($doc);  //or you can: echo "$doc->item  $row->qty  $row->status<br />";}