это мое php
скрипт для вставки и извлечения данных из mongoDB.
далее работает вставка и метод find () тоже работает.
Проблема в том, что при использовании условия внутри метода find () это не даст никаких результатов.
это почему?
//object class
class data{
public $test1 = "default";
public $test2 = "default";
}
//creating 4 objects and change some values and insert to DB
$data1 = new data();
$data1->test1 = '2';
$data2 = new data();
$data2->test1 = '2';
$data3 = new data();
$data3->test1 = '3';
$data4 = new data();
$collection->insert([$data1, $data2, $data3, $data4]);
//viewing all (this is works - retrieve all inserted data)
$res = $collection->find();
foreach($res as $val){
var_dump($val);
}//retrieve with condition (not works)
$q = array('test1' => '2');
$res2 = $collection->find($q);
foreach($res2 as $val2){
var_dump($val2);
}
Потому что с помощью этого php-скрипта вы вставляете только один объект в Mongo. http://php.net/manual/en/mongocollection.insert.php
В результате в Mongo (вы можете проверить это с помощью оболочки Mongo) у вас есть что-то вроде этого:
{
"_id" : ...,
"0" : {
"test1" : "2",
"test2" : "default"},
"1" : {
"test1" : "2",
"test2" : "default"},
"2" : {
"test1" : "3",
"test2" : "default"},
"3" : {
"test1" : "default",
"test2" : "default"}
}
Из кода вы можете подтвердить это с помощью условия поиска:
$q = array('0.test1' => '2');
Чтобы получить желаемый результат, вы должны вставить такие значения:
$collection->insert($data1);
$collection->insert($data2);
$collection->insert($data3);
$collection->insert($data4);
Других решений пока нет …