2011-08-16 7 views
19

Lorsque j'ai inséré des documents dans une collection (sans ObjectID), mongoDB ajoute ses propres ObjectID.Rechercher un document avec ObjectID dans mongoDB

Je souhaite interroger un document par son ObjectID unique.

$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000'))); 

Il ne fonctionne pas non plus avec le préfixe de MongoId ou ObjectID devant « 4e49fd8269fd873c0a000000 ».

Quelle est la bonne façon d'interroger par ObjectID avec mongoDB en PHP?

+0

Il fonctionne dans la console avec "ObjectID" devant 4e49fd ... mais pas en PHP. – InspiredJW

Répondre

50

Jolie que vous devez utiliser un objet MongoId, par exemple

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

Les notes sur la page Querying sont un peu obtus, mais il ne mentionne ...

À moins que l'utilisateur a spécifié sinon, le champ _id est un MongoId. L'erreur la plus fréquente consiste à utiliser une chaîne pour correspondre à un MongoId. Gardez à l'esprit que ce sont deux types de données différentes, et ne correspondra pas à l'autre de la même manière que la chaîne « array() » est pas la même chose comme un tableau vide

+0

J'écris la même requête, mais la requête ne fonctionne pas. $ collection = $ db-> Collection ("video_detail"); $ cursor = $ collection-> findOne (array ('user_id' => nouveau MongoId ("575289f33a31b98a4c8b4567"))); –

10

Je pense que maintenant les modifications de l'API à MongoDB\BSON\ObjectID , vous pouvez également utiliser [] pour désigner un tableau en PHP 5.4+, il devrait donc être:

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

basé sur la réponse de Phil.

+0

c'est la bonne solution pour la dernière version. Merci @coolgod – Bala

+0

Cela fonctionne ... merci man – Jpec

+0

Cela fonctionne pour moi, mais je suis un peu difficile à comprendre d'où 'MongoDB \ BSON \ ObjectID' vient. Il n'est défini nulle part dans le dossier 'vendor/mongodb' en tant que classe distincte, pour autant que je puisse le voir. NetBeans est normalement bon à l'introspection du projet, mais il ne peut pas le voir non plus. Et pourtant ça marche! – halfer

0

Avec alcaeus/mongo-php-adapter (sous php 7), nécessaire pour convertir \MongoId type BSON:

$filter = []; 
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType(); 
$cursor = $collection->find($filter); 
Questions connexes