Mongoid中的更多$ or语句合并为一个并产生错误的结果

时间:2018-09-03 13:03:28

标签: mongodb mongoid

在订单表inc_id = 1中,其状态为canceled,因此,当我在mongo shell中运行它时,没有任何结果

db.orders.find({
  $or: [{status:'canceled'}, {status:'booked'}],
  $or: [{status:'booked'}, {status: 'completed'}],
  inc_id: 1
})

但是当我在轨道上的红宝石中使用蒙戈德运行

orders = Order.where({"$or": [{status:'canceled'}, {status:'booked'}]})
orders = orders.where({"$or": [{status:'booked'}, {status: 'completed'}]})
orders = orders.where(:inc_id => 1)

结果是inc_id 1记录。查询以这种方式执行

db.orders.find({
  $or: [{status:'canceled'}, {status:'booked'},
        {status: 'completed'}],
  inc_id: 1
})

我如何使用蒙古型来实现以前的行为

软件详细信息:

  • Mongoid:宝石'mongoid','〜> 6.0.3'
  • Mongo:MongoDB Shell版本v3.6.5
  • 操作系统:Mac OSX

1 个答案:

答案 0 :(得分:0)

尝试一下:

Order.where("$and" => [{ "$or" => [{status: 'canceled'}, {status: 'booked'}] },
                       { "$or" => [{status: 'booked' }, {status: 'completed'}] }])
     .where(inc_id: 1)