PHP MongoDB找到多个“AND”条件?

时间:2016-03-21 12:10:05

标签: php mongodb

经过数小时的实验和阅读,我找不到解决这个问题的方法:

我想要使用多个AND条件进行MongoDB->find($query)

例如,假设我想要id = 5且a< 6和a> 2和b> 10和b< 20

我期待$ query为:

$query = array("id" => 5,
   "a" => array('$gt' => 2,  
           '$lt' => 6),
   "b" => array('$gt' => 10,
           '$lt' => 20))

但是这会使用我的数据库返回空结果

我尝试了各种语法,例如:

$query = array("id" => 5,
          array( "a" => array('$gt' => 2,
              '$lt' => 6),
       "b" => array('$gt' => 10,
             '$lt' => 20)))

但这也失败了。

还尝试使用"$AND"变种,没有运气。

是否可以在PHP-MongoDB AND请求中“混合”多个find()条件?

2 个答案:

答案 0 :(得分:2)

我刚刚使用MongoDB PHP驱动程序v1.6.11(PHP-5.5.9)对此进行了测试。测试数据如下

db.collection.insert({id:5, a:4, b:15})
db.collection.insert({id:9, a:4, b:15})
db.collection.insert({id:5, a:4, b:20})

使用PHP代码段:

$condition = array(
    '$and' => array(
        array(
            "id" => 5,
            "a" => array('$gt' => 2, '$lt' => 6),
            "b" => array('$gt' => 10, '$lt' => 20)
        )
    )
);
$docs = $coll->find($condition);

foreach( $docs as $o=> $doc) {
    echo json_encode($doc);
}

以上仅返回第一个文档样本。这表明$and应该按预期工作。我还没有$and进行测试,即:

$condition = array(
                "id" => 5,
                "a" => array('$gt' => 2, '$lt' => 6),
                "b" => array('$gt' => 10, '$lt' => 20)
);

哪个也一样。尝试检查数据集,是否有符合条件的文档。

答案 1 :(得分:0)

此问题已关闭:DB中的错误值类型(字符串而不是float / double)。更新为更正DB中的类型时,按预期工作。