PHP Mongodb find()无法按预期工作

时间:2019-03-10 14:11:03

标签: php mongodb find

我收到了一个非常基本的Mongodb Find请求,该请求似乎不起作用。 PHP 7+ 我想要类似SQL的内容:where 'common' LIKE %Burk% enter image description here

简单的查询是调用countries collection并生成布基纳法索作为输出

查询1:

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

var_dump打印数据库中的所有内容

查询2:

当我找到(没有空的[])时,它会var_dump没什么必要

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

var_dump($countries);

我明白了:

enter image description here

我也尝试过这种格式。

查询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 :(得分:0)

我终于开始工作了!

这就是我所做的。

$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"}}}

答案 1 :(得分:-1)

所有过滤器应位于第一个数组参数中

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

第二个参数用于选项。您应该通过typeMap作为将对象转换为数组的选项

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