如何在php中为mongoDB编写搜索查询?

时间:2016-02-01 10:28:16

标签: php mongodb 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 个答案:

答案 0 :(得分:1)

因为使用这个php脚本,你只能在Mongo中插入一个对象。 http://php.net/manual/en/mongocollection.insert.php

因此在Mongo中(您可以使用Mongo shell进行检查),您可以使用以下内容:

{
"_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);