Как написать поисковый запрос в php для mongoDB?

это мое 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);
}

1

Решение

Потому что с помощью этого 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]