2012-06-04 11 views
12

Sto cercando di utilizzare le espressioni regolari per interrogare Mongodb usando Docmine Mongodb ODM su Symfony 2.Come posso usare le espressioni regolari con Docodine Mongodb ODM?

Conosco lo PHP mongo driver can do it. Tuttavia, non so come farlo con Doctrine.

Utilizzo la stessa classe? Come faccio riferimento a MongoRegex da Symfony?

+0

Per qualcuno che non abituato a usare il MongoRegex come che è stato sconsigliato in grado di provare questa soluzione MongoRegex è stato depecated come da http://php.net/manual/en/class.mongoregex. php http://stackoverflow.com/questions/36761669/symfony2-need-to-use-the-regular-expression-in-doctrines-mongodb-odm-to-check Ecco perché ho dato questa risposta per coloro che potrebbero avere preoccupazioni in merito. –

risposta

28

Questo problema si è verificato qualche tempo fa nella mailing list doctrine-user. È possibile utilizzare la classe \MongoRegex direttamente nelle query ODM:

$documentRepository->findBy(array(
    'foo' => new \MongoRegex('/^bar/'), 
)); 

Oppure, se si utilizza un generatore di query:

$queryBuilder->field('foo')->equals(new \MongoRegex('/^bar/')); 

Tenete a mente che, modelli regex case-sensitive front-ancorata saranno in grado di utilizzare gli indici nel modo più efficiente. Questo è discusso più dettagliatamente nello Mongo docs.

+0

Ho bisogno di utilizzare la nuova classe MongoDB \ BSON \ Regex poiché ora MongoRegex è deperecato. Come posso usarlo nel progetto Symfony2. var_dump ($ regex); http://php.net/manual/en/mongodb-bson-regex.construct.php –

1

si può seguire la domanda su stack overflow per i dettagli How to use Reserved characters in createQueryBuilder and MongoRegix,

Inoltre, mentre/^ a /,/^ a. /, e/^ a. $/corrisponde a stringhe equivalenti, hanno caratteristiche di prestazione diverse. Tutte queste espressioni utilizzano un indice se esiste un indice appropriato; tuttavia,/^ a. /, e/^ a. $/sono più lenti./^ a/può interrompere la scansione dopo aver trovato il prefisso. Mongo Docs Regix

Problemi correlati