2012-06-04 34 views
12

Tôi đang cố sử dụng cụm từ thông dụng để truy vấn Mongodb bằng cách sử dụng Mongodb ODM của Doctrine trên Symfony 2.Làm cách nào để sử dụng các biểu thức chính quy với Mongodb ODM của Doctrine?

Tôi biết số PHP mongo driver can do it. Tuy nhiên, tôi không biết làm thế nào để làm điều này với Doctrine.

Tôi có sử dụng cùng một lớp học không? Làm thế nào để tôi tham khảo MongoRegex từ bên trong Symfony?

+0

Đối với những người không wont sử dụng MongoRegex như đã được phản đối có thể thử giải pháp này MongoRegex đã được depecated theo 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 Đó là lý do tại sao tôi đã đưa ra câu trả lời này cho những người có thể lo ngại về điều này. –

Trả lời

28

Điều này xuất hiện một lúc trước đây trên danh sách gửi thư doctrine-user. Bạn có thể sử dụng lớp \MongoRegex trực tiếp trong các truy vấn ODM của bạn:

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

Hoặc nếu sử dụng một người thợ xây truy vấn:

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

Hãy ghi nhớ rằng trước-neo, case-sensitive mẫu regex sẽ có thể sử dụng các chỉ mục hiệu quả nhất. Điều này được thảo luận chi tiết hơn trong Mongo docs.

+0

Tôi cần sử dụng lớp MongoDB \ BSON \ Regex mới khi MongoRegex được loại bỏ ngay bây giờ. Làm thế nào tôi có thể sử dụng điều này trong dự án Symfony2. var_dump ($ regex); http://php.net/manual/en/mongodb-bson-regex.construct.php –

1

bạn có thể làm theo câu hỏi trên stack overflow để xem chi tiết How to use Reserved characters in createQueryBuilder and MongoRegix,

Thêm vào đó, trong khi/^ a /,/^ a. /, và/^ a. $/khớp chuỗi tương đương, chúng có đặc điểm hiệu suất khác nhau. Tất cả các biểu thức này sử dụng một chỉ mục nếu một chỉ mục thích hợp tồn tại; tuy nhiên,/^ a. /, và/^ a. $/chậm hơn./^ a/có thể ngừng quét sau khi khớp tiền tố. Mongo Docs Regix

Các vấn đề liên quan