在MongoDB查询中组合AND和OR

时间:2012-09-30 03:55:52

标签: codeigniter mongodb

我正在为一个使用mongo进行自动存储的汽车网站构建一个相当复杂的搜索公式。我发现其中大部分都非常简单。它目前支持按照车身风格,新车型/新车型等进行过滤。但是,我遇到了问题,它是新车和二手车默认的地方,因为它们都有单独的价格范围(计算低和高)价格基于每月付款范围)。我怎样才能做到这一点?

例如,如果它只是一个二手汽车,我们使用这个(CodeIgniter)代码:

$this->mongo_db->where('stock_type', 'used');
$this->mongo_db->where_between('internet_price', $amounts['bottom_amt_used'], $amounts['top_amt_used']);

我们为新车做类似的事情。自己工作得很好。我如何将这些结合起来以便找到

  • 如果stock_type = new,WHERE_BETWEEN(a,b)
  • 或如果stock_type = false,WHERE_BETWEEN(c,d)

并将其与其他过滤器结合使用,例如WHERE body_style IN(...)?

我们正在使用CodeIgniter和Alex Bilbie的mongodb库,这可能会使这里的事情变得复杂,我在想。

1 个答案:

答案 0 :(得分:0)

在Mongo shell中,查询非常简单。你可以使用类似的东西:

db.vehicle_stock.find({ $or: [ { stock_type: 'used', internet_price: { $gte: 123, $lte: 145 }}, { stock_type: 'new', internet_price: { $gte: 161, $lte: 184 }} ]});

你可以尝试与Alex Bilbie的图书馆类似的东西:

$this.mongo_db->where(array(
  '$or' => array(
    array( 'stock_type' => 'used', 'internet_price' => array( '$gte' => 123, '$lte' => 145 )),
    array( 'stock_type' => 'new', 'internet_price' => array( '$gte' => 161, '$lte' => 184 ))
  )
));