1

最近、リチウム フレームワーク + mongoDB を使い始めました。複数の or ステートメントを含む非常に単純なクエリを実行したいと考えています。DB に 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
        ),
    )
));

もちろん、このスニペットは間違っているため、2 番目の 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

リチウムについてはわかりませんが、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 に答える