0

我有一个非常基本的 Mongodb Find 请求,它似乎不起作用。php 7+ 我想要类似 SQL 的东西:where 'common' LIKE %Burk% 在此处输入图像描述

简单的查询是调用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_dumps 没有必要

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

var_dump($countries);

我明白了:

在此处输入图像描述

我也试过这种格式。

问题 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']]);

产生这个;

在此处输入图像描述

而不是“布基纳法索”这个词

仍然没有成功

4

2 回答 2

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"}}}
于 2019-03-13T15:56:12.287 回答
-1

所有过滤器都应该在第一个数组参数中

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

第二个参数用于选项。您应该将 typeMap 作为选项传递以将对象转换为数组

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

于 2019-03-10T15:28:21.907 回答