MongoDB或范围的运营商

时间:2014-02-16 16:57:31

标签: php mongodb doctrine-orm doctrine-odm


这是Im使用的范围:

$Range1=array('$or'=>array(
                array( '$gte' =>  floatval($O_NLA), '$lte' => $N_NLA ),
                array( '$gte' =>  floatval($N_SLA), '$lte' => $O_SLA ))
                );
$Range2=array('$or'=>array(
                array( '$gte' =>  floatval($N_SLO), '$lte' => $O_SLO ),
                array( '$gte' =>  floatval($O_NLO), '$lte' => $N_NLO ))
                );

我的查询的一部分:

$finder=$reposit->findBy(
                                                array(
                                                'field1' => $Range1,
                                                'field2' => $Range2,
                                                'display'=>1
                                                ))->toArray();
  

“message”:“localhost:27017:无效的运算符:$或”.....(虽然很长)

如何在没有查询构建器的情况下使用$或operator with doctrine?

1 个答案:

答案 0 :(得分:1)

findBy([
    '$or' => [
        ['field1' => ['$gte' =>  floatval($O_NLA), '$lte' => $N_NLA]],
        ['field1' => ['$gte' =>  floatval($N_SLA), '$lte' => $O_SLA]],
        ['field2' => ['$gte' =>  floatval($N_SLO), '$lte' => $O_SLO]],
        ['field2' => ['$gte' =>  floatval($O_NLO), '$lte' => $N_NLO]]
    ]
    , 'display' => 1
])

或实际上:

findBy([
    '$and' => [
        ['$or' => [
            ['field1' => ['$gte' =>  floatval($O_NLA), '$lte' => $N_NLA]],
            ['field1' => ['$gte' =>  floatval($N_SLA), '$lte' => $O_SLA]],
        ]],
        ['$or' => [
            ['field2' => ['$gte' =>  floatval($N_SLO), '$lte' => $O_SLO]],
            ['field2' => ['$gte' =>  floatval($O_NLO), '$lte' => $N_NLO]]
        ]]
    ]
    , 'display' => 1
])

根据你的问题更准确。

由于$or在条件下工作,然后包含类似find()的数组。