php filter find lithium

PHP Lithium: Filtrar un DocumentSet existente y obtener el primer Match



filter find (3)

Estoy recuperando un DocumentSet en Lithium de MongoDB, pero no quiero procesar todos los documentos a la vez. En cambio, me gustaría tener un filtro, que podría decir algo como esto:

$manyDocuments->giveMeTheOneWhere(array(''foo'' => ''bar''));

Ya traté de hacerlo de esta manera, pero no funcionó:

$manyDocuments->find(function($singleDocument){ return ($singleDocument->foo == ''bar''); });

Incluso si devuelvo manualmente verdadero dentro del cierre, siempre devuelve un DocumentSet vacío.

Solo para agregar claridad: no estoy buscando una operación de base de datos, en cambio quiero obtener una de un DocumentSet ya existente. ¿Existe una forma elegante de lograr esto o necesito iterar a través del conjunto utilizando una función personalizada?


Estoy en lo último de la rama principal de Lithium y escribí esta prueba de unidad que funciona para mí. No estoy muy seguro de por qué obtienes un DocumentSet vacío.

$docs = new DocumentSet(array(''data'' => array( new Document(array(''data'' => array( ''id'' => 1, ''foo'' => ''bar'' ))), new Document(array(''data'' => array( ''id'' => 2, ''foo'' => ''baz'' ))), new Document(array(''data'' => array( ''id'' => 3, ''foo'' => ''bar'' ))), new Document(array(''data'' => array( ''id'' => 4, ''blah'' => ''ack'' ))) ))); $filtered = $docs->find(function($doc) { return $doc->foo === ''bar''; }); $expected = array( ''0'' => array(''id'' => 1, ''foo'' => ''bar''), ''2'' => array(''id'' => 3, ''foo'' => ''bar'') ); $this->assertIdentical($expected, $filtered->data());


Eso me parece bien. ¿Es ese el código exacto que estás usando?
Por ejemplo, ¿el valor ''bar'' está usando algo que está pasando?


En lugar de usar find() acabo de usar first() con un cierre. Esto funciona como se esperaba Lamentablemente, eso fue lo único que no probé antes. Disculpe por responder mi propia pregunta.

De todos modos, seguiría interesado en una forma de obtener otro conjunto de documentos.