查询中的锂框架多个'或'语句(使用mongoDB)

时间:2012-11-11 14:19:21

标签: php mongodb lithium

我最近开始使用锂框架+ mongoDB。我想做一个包含多个或语句的非常简单的查询。 我在DB中有使用publish_up和publish_down字段的文章。我想只获取pulbis_down字段比现在更高的那些记录/文件OR null AND publish_up field than now now now。

$items = $article::find('all', array(
    'conditions' => array(
        '$or' => array(
            '$gt' => array('publish_down', $mongoDateNow),
            'publish_down' => $mongDateNull
        ),
        '$or' => array(
            '$lt' => array('publish_up', $mongoDateNow),
            'publish_up' => $mongDateNull
        ),
    )
));

当然这个片段是错误的,因此第二个或语句会覆盖第一个(因为相同的数组键)。 我试图将它们包装成一个单独的数组,但是会出错。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

此查询将获取文章(publish_down>现在 OR publish_down = null) AND (publish_up< now OR publish_up = null )

    $items = Articles::find('all', array(
        'conditions' => array(
            '$or' => array(
                array('publish_down' => array('$gt' => $mongoDateNow)),
                array('publish_down' => null)
            ),
            '$or' => array(
                array('publish_up' => array('$lt' => $mongoDateNow)),
                array('publish_up' => null)
            ),
        )
    ));

答案 1 :(得分:0)

我不知道锂,但在PHP中你可以使用多个$ OR,如下所示

$items = $article::find('all', array(
    'conditions' => array(
        '$or' => array(
        array(
            '$gt' => array('publish_down', $mongoDateNow),
            'publish_down' => $mongDateNull
        ),
        array(
            '$lt' => array('publish_up', $mongoDateNow),
            'publish_up' => $mongDateNull
        )
        ),
    )
));

答案 2 :(得分:0)

我认为正确答案是:

'$and' => array(
    array(
        '$or'=>array(
            array('publish_up' => null),
            array('publish_up' => array('$lt' => $mongoDateNow))
        )
    ),
    array(
        '$or'=>array(
            array('publish_down' => null), 
            array('publish_down' => array('$gt' => $mongoDateNow))
        )
    )
)