2011-08-16 184 views
19

Cuando inserté algunos documentos en una colección (sin un ObjectID) mongoDB agrega sus propios ObjectID.Buscar un documento con ObjectID en mongoDB

Quiero consultar un documento por su ObjectID único.

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

No funciona bien con el prefijo de MongoId o de objeto frente a '4e49fd8269fd873c0a000000'.

¿Cuál es la forma correcta de consultar por ObjectID con mongoDB en PHP?

+0

Se trabaja en la consola con "de objeto" delante de 4e49fd ... pero no en PHP. – InspiredJW

Respuesta

50

bastante seguro de que tiene que utilizar un objeto MongoId, por ejemplo

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

Las notas en la página Querying son un poco obtuso, pero sí menciona ...

A menos que el usuario ha especificado de lo contrario, el campo _id es un MongoId. El error más común es el de utilizar una cuerda para unir MongoId. Tenga en cuenta que se trata de dos tipos de datos diferentes, y no va a coincidir entre sí de la misma manera que el "array()" cadena no es lo mismo que una matriz vacía

+0

Escribo la misma consulta, pero la consulta no funciona. $ collection = $ db-> Collection ("video_detail"); $ cursor = $ collection-> findOne (array ('user_id' => new MongoId ("575289f33a31b98a4c8b4567"))); –

10

Creo que ahora los cambios en la API de MongoDB\BSON\ObjectID , también se puede utilizar [] para denotar una matriz en PHP 5.4+, por lo que debe ser:

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

basado en la respuesta de Phil.

+0

esta es la solución correcta para la última versión. Gracias @coolgod – Bala

+0

Esto funciona ... gracias hombre – Jpec

+0

Esto funciona para mí, pero estoy un poco perdido para entender de dónde viene 'MongoDB \ BSON \ ObjectID'. No está definido en ninguna parte de la carpeta 'vendor/mongodb' como una clase separada, hasta donde puedo ver. NetBeans normalmente es bueno en la introspección del proyecto, pero tampoco puede verlo. ¡Y aun así funciona! – halfer

0

Con alcaeus/mongo-php-adapter (bajo php 7), necesaria para convertir a \MongoId tipo BSON:

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