2012-06-21 14 views
11

Estoy haciendo una consulta a un MongoDB y solo quiero el primer objeto. Sé que podría usar findOne, pero todavía estoy confundido sobre dónde me estoy equivocando.Obtener solo el primer objeto de Mongo Cursor

Esto no funciona:

if ($cursor->count() > 0) { 
    $image = $cursor->current(); 
    // neither does this work 
    // $image = $cursor[0]; 
    return $image; 
} else { 
    return false; 
} 

//echo $image->filename; 
// Throws error: Trying to access property of non-object image 

Esto funciona sin embargo:

if ($cursor->count() > 0) { 
    $image = null; 
    foreach($cursor as $obj) 
     $image = $obj; 
    return $image; 
} else { 
    return false; 
} 

Respuesta

14

¿Qué tal esto:

if ($cursor->count() > 0) { 
    $cursor->next(); 
    $image = $cursor->current(); 
    return $image; 
} else { 
    return false; 
} 

Bono: cita de the Doc page

matriz pública MongoCursor :: current (void)
Esto devuelve NULL hasta Se llama a MongoCursor :: next().

+0

Sí, eso funciona. Wow ... eso fue una tontería de mi parte. Lo aceptaré tan pronto como pueda. – xbonez

+0

Está bien, me sorprendió esto también no hace tanto tiempo.) – raina77ow

0

La solución provista por raina77ow utiliza la biblioteca Mongo que está marcada como heredada.

Por el momento sólo hay una manera de conseguir primer elemento desde el cursor - utilizar MongoDB\Driver\Cursor::toArray método:

$cursor = $collection->find(); 
$firstDocument = $cursor->toArray()[0]; 
+0

Llamada al método no definido MongoCursor :: toArray() – theBugger

Cuestiones relacionadas