1

我最近开始使用锂框架+ mongoDB。我想做一个包含多个 or 语句的非常简单的查询。我在数据库中有带有 publish_up 和 publish_down 字段的文章。我只想获取 pulbis_down 字段高于现在或 null 且 publish_up 字段低于现在或 null 的记录/文档。

$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
        ),
    )
));

当然这个片段是错误的,因此第二个 or 语句会覆盖第一个(因为相同的数组键)。我试图将它们包装到一个单独的数组中,但给出了错误。任何想法?

4

3 回答 3

3

此查询将获取具有 (publish_down > now 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)
            ),
        )
    ));
于 2012-11-11T16:27:52.917 回答
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))
        )
    )
)
于 2014-03-28T03:43:58.220 回答
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
        )
        ),
    )
));
于 2012-11-11T14:32:14.180 回答