#php #regex #mongodb
#php #регулярное выражение #mongodb
Вопрос:
У меня есть коллекция mongo, и я хотел бы получить все документы, имена которых начинаются с заданной буквы на PHP. Мой код:
$letter = "c";
$client = new MongoDBClient();
$pme = $client->selectCollection("belgium", "pme");
$regex = new MongoDBBSONRegex ("^$letter", "i");
$query = array('name' => $regex); // 1
$query = array('name' => $regex, array( 'sort' => array( 'OrderBy' => 1 ) )); // 2
$query = new MongoDBDriverQuery( array('name' => $regex), array( 'sort' => array( 'OrderBy' => 1 ) ) ); // 3
$cursor = $pme->find($query);
Когда я использую запрос 1. Я получил все документы, начинающиеся с буквы c, но не упорядоченные. Когда я использую запрос 2, я ничего не получаю. И, наконец, когда я использую запрос 3, я получаю почти каждый документ, а не только те, которые начинаются с ‘c’. Что я здесь делаю не так?
Ответ №1:
mongo
Метод sort
In должен быть применен к cursor
полученному с помощью find
:
$letter = "c";
$client = new MongoDBClient();
$pme = $client->selectCollection("belgium", "pme");
$regex = new MongoDBBSONRegex ("^$letter", "i");
$query = array('name' => $regex);
// sort by field `name` happens here
$options = array("sort" => array("name" => 1), );
$cursor = $pme->find($query, $options);
Комментарии:
1. Спасибо, но метод сортировки курсора больше не существует.
2. Я обновил ответ. Пожалуйста, смотрите github.com/mongodb/mongo-php-driver/issues/214 подробнее.
3. Спасибо, Майк, я собирался опубликовать именно это решение. Теперь я работаю.