Больше $ или операторов в mongoid сливаются в одно и дают неверные результаты - PullRequest
0 голосов
/ 03 сентября 2018

В таблице заказов inc_id = 1, имеют статус canceled, поэтому, когда я запускаю это в оболочке Монго, я не получаю никаких результатов

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 v3.6.5
  • ОС: Mac OSX

1 Ответ

0 голосов
/ 04 сентября 2018

Попробуйте это:

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