Как заставить работать запрос «LIKE» в MongoDB? - PullRequest
6 голосов
/ 27 апреля 2011

У меня есть список названий улиц, и я хочу выбрать все, которые начинаются с "Al". В моем MySQL я бы сделал что-то вроде

SELECT * FROM streets WHERE "street_name" LIKE "Al%"

Как насчет MongoDB с использованием PHP?

Ответы [ 7 ]

14 голосов
/ 27 апреля 2011

Используйте регулярное выражение:

db.streets.find( { street_name : /^Al/i } );

или

db.streets.find( { street_name : { $regex : '^Al', $options: 'i' } } );

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

Превращение этого в PHP:

$regex = new MongoRegex("/^Al/i");
$collection->find(array('street_name' => $regex));
3 голосов
/ 27 апреля 2011

См .: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

Кроме того, настоятельно рекомендуем просто использовать собственный коннектор mongodb из PHP вместо оболочки.Это намного быстрее, чем любая обертка.

http://php.net/class.mongodb

1 голос
/ 12 апреля 2017

вот мой рабочий пример:

<?php
use MongoDB\BSON\Regex;
$collection = $yourMongoClient->yourDatabase->yourCollection;
$regex = new Regex($text, 's');
$where = ['your_field_for_search' => $regex];
$cursor = $collection->find($where);
//Lets iterate through collection
1 голос
/ 27 сентября 2016

MongoRegex устарел.
Использовать MongoDB \ BSON \ Regex

$regex = new MongoDB\BSON\Regex ( '^A1');
$cursor = $collection->find(array('street_name' => $regex));
//iterate through the cursor
0 голосов
/ 03 июня 2019

Вы также можете сделать что-то вроде этого

['key' => ['$regex' => '(?i)value']]
0 голосов
/ 07 января 2017
<?php
$mongoObj = new MongoClient();
$where = array("name" => new MongoRegex("^/AI/i"));
$mongoObj->dbName->collectionName->find($where);
?>

Более подробная информация

0 голосов
/ 25 декабря 2013

$collection.find({"name": /.*Al.*/})

или, аналогично,

$collection.find({"name": /Al/})

Вы ищете что-то, где где-то содержится «Al» (оператор% «SQL»эквивалентно регулярному выражению ''. * '), а не тому, что "Al" привязано к началу строки.

...