我收到了一个非常基本的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_dump没什么必要
$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']]);
产生这个;
代替单词 '布基纳法索'
仍然没有成功
答案 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')) ) );
{"_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']]
;