我最近开始使用锂框架+ 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
),
)
));
当然这个片段是错误的,因此第二个或语句会覆盖第一个(因为相同的数组键)。 我试图将它们包装成一个单独的数组,但是会出错。 有什么想法吗?
答案 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))
)
)
)