Lorsque j'ai inséré des documents dans une collection (sans ObjectID), mongoDB ajoute ses propres ObjectID.
Je veux interroger un document par son ObjectID unique.
$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));
Cela ne fonctionne pas avec le préfixe MongoID ou ObjectID devant '4e49fd8269fd873c0a000000'.
Quelle est la bonne façon de faire une requête par ObjectID avec mongoDB en PHP?
Vous êtes sûr que vous devez utiliser un objet MongoId
, par exemple
$item = $collection->findOne(array(
'_id' => new MongoId('4e49fd8269fd873c0a000000')));
Les notes sur la page Interrogation sont un peu obtuses, mais il est fait mention de ...
Sauf indication contraire de l'utilisateur, le champ _id est un MongoId. L'erreur la plus courante consiste à utiliser une chaîne pour correspondre à un MongoId. N'oubliez pas qu'il s'agit de deux types de données différents et qu'ils ne se correspondent pas de la même manière que la chaîne "array ()" n'est pas identique à un tableau vide.
Je pense que maintenant, l'API change de MongoDB\BSON\ObjectID
, vous pouvez aussi utiliser []
pour désigner un tableau dans PHP 5.4+, ainsi il devrait être:
$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);
basé sur la réponse de Phil.
Pour MongoDB\Driver\Manager, une version moderne de MongoDB, vous pouvez envisager le code de travail suivant:
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";
}
À des fins de test:
foreach ($docs as $doc) {
print_r($doc);
//or you can: echo "$doc->item $row->qty $row->status<br />";
}
Avec alcaeus/mongo-php-adapter (sous PHP 7), nécessaire pour convertir \MongoId
au type BSON:
$filter = [];
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType();
$cursor = $collection->find($filter);