PHP Mongodb find () не работает должным образом - PullRequest
0 голосов
/ 10 марта 2019

Я получил очень простой запрос поиска Mongodb, который, похоже, не работает. php 7+ Я хочу что-то вроде в SQL: where 'common' LIKE %Burk% enter image description here

Простой запрос - вызвать countries collection и выдать Буркина-Фасо в качестве вывода

QUERY 1:

$countries_tb= $db->selectCollection('country_city_data');
 $countries = $countries_tb->find([],[
    'common' => new MongoDB\BSON\Regex('Burk')]);
var_dump($countries);

var_dump печатает все в базе данных

QUERY 2:

когда я нахожу (без пустого []), в var_dumps ничего не требуется

 $countries = $countries_tb->find(/*without the []*/ [
    'common' => new MongoDB\BSON\Regex('Burk')]);

var_dump($countries);

Я получаю это:

enter image description here

Я также пробовал этот формат.

QUERY 3:

 $countries = $countries_tb->find(
                     array('name'=>
 array(  'common'=>new MongoDB\BSON\Regex('Burk'))));

                var_dump($countries);

Все еще безуспешно.

Как предложено @noobProgrammer ниже, сделайте так:

 $countries_tb->find(['name' => 
                  ['common'=>new MongoDB\BSON\Regex('Burk')]], 
                  ['typeMap' => ['root' => 'array', 'document' => 'array']]);

Производит это;

enter image description here

вместо слова 'Буркина-Фасо'

Все еще НЕТ успеха

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Я наконец заработал!

Это то, что я сделал.

$countries = $countries_tb->find(array('name.common' =>   array('$regex' =>  'Burk') ) );

Обратите внимание на . в name.common

Вот мой foreach цикл '

foreach( $countries as $country => $name) { 

   foreach ($name as $n){

       if(isset($n->common)){

            var_dump($n->common);

        }

   }
}

//It prints out:    country_cities.php:90:string 'Burkina Faso' (length=12)

Каким-то образом это НЕ работает

$countries = $countries_tb->find(
                         array('name'=>
                                 array('common' =>   
                                         array('$regex' =>   'Burk')) ) );

Это JSON '

{"_id":"55a0f42f20a4d760b5fc306d","altSpellings":["BF"],"area":272967,"borders":["BEN","CIV","GHA","MLI","NER","TGO"],"callingCode":["226"],"capital":"Ouagadougou","cca2":"BF","cca3":"BFA","ccn3":"854","cioc":"BUR","currency":["XOF"],"demonym":"Burkinabe","landlocked":true,"languages":{"fra":"French"},"latlng":[13,-2],"name":{"common":"Burkina Faso","native":{"fra":{"common":"Burkina Faso","official":"Burkina Faso"}},"official":"Burkina Faso"},"region":"Africa","subregion":"Western Africa","tld":[".bf"],"translations":{"cym":{"common":"Burkina Faso","official":"Burkina Faso"},"deu":{"common":"Burkina Faso","official":"Burkina Faso"},"fin":{"common":"Burkina Faso","official":"Burkina Faso"},"fra":{"common":"Burkina Faso","official":"Burkina Faso"},"hrv":{"common":"Burkina Faso","official":"Burkina Faso"},"ita":{"common":"Burkina Faso","official":"Burkina Faso"},"jpn":{"common":"ブルキナファソ","official":"ブルキナファソ"},"nld":{"common":"Burkina Faso","official":"Burkina Faso"},"por":{"common":"Burkina Faso","official":"Burkina Faso"},"rus":{"common":"Буркина-Фасо","official":"Буркина -Фасо"},"spa":{"common":"Burkina Faso","official":"Burkina Faso"}}}
0 голосов
/ 10 марта 2019

Все фильтры должны быть в первом параметре массива

$countries_tb->find(['area' => 272967, 'capital' => 'Ouagadougou'] , options );

Второй параметр предназначен для опций. Вы должны передать typeMap в качестве опции для преобразования объекта в массив

$options = ['typeMap' => ['root' => 'array', 'document' => 'array']];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...