Как сделать так, чтобы запрос "LIKE" работал в MONGODB с использованием PHP?
У меня есть список названий улиц, и я хочу выбрать все, которые начинаются с "Al". В моем MySQL я бы сделал что-то вроде
SELECT * FROM streets WHERE "street_name" LIKE "Al%"
Как насчет mongodb, использующего php?
6 ответов
Используйте регулярное выражение:
db.streets.find( { street_name : /^Al/i } );
или же:
db.streets.find( { street_name : { $regex : '^Al', $options: 'i' } } );
http://www.mongodb.org/display/DOCS/Advanced+Queries
Превращая это в PHP:
$regex = new MongoRegex("/^Al/i");
$collection->find(array('street_name' => $regex));
Смотрите: http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
Кроме того, настоятельно рекомендуем просто использовать собственный коннектор mongodb из PHP вместо оболочки. Это намного быстрее, чем любая обертка.
Вот мой рабочий пример:
<?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
MongoRegex устарела.
Используйте MongoDB\BSON\Regex
$regex = new MongoDB\BSON\Regex ( '^A1');
$cursor = $collection->find(array('street_name' => $regex));
//iterate through the cursor
$collection.find({"name": /.*Al.*/})
или похожие,
$collection.find({"name": /Al/})
Вы ищете что-то, что где-то содержит "Al" (оператор SQL "%" эквивалентен регулярному выражению ".*"), А не то, что "Al" привязано к началу строки.
Вы также можете сделать что-то вроде этого
['key' => ['$regex' => '(?i)value']]
<?php
$mongoObj = new MongoClient();
$where = array("name" => new MongoRegex("^/AI/i"));
$mongoObj->dbName->collectionName->find($where);
?>