2017-01-31 3 views
1

Я использую MongoDB для нового приложения, которое я создаю, и мне нужны только определенные данные. Мне нужны следующие поля: current (boolean), position, sector и name. Поле позиции заполняется одним из четырех значений: «cash, SPVR, OFF и training», в то время как поле сектора имеет одно из двух значений: «Break или Working». Мне нужен запрос, который даст мне все записи, в которых существуют следующие условия: 1. current = TRUE 2. Позиция = «SPVR» или «CASH» ИЛИ Сектор = «BREAK» и 3. Имя не NULLMongoid query с условием AND и OR

Проблема заключается в том, что есть сотни записей, имеющих значение BREAK, но большинство из них не имеют значения в поле Name. Мне не нужны записи, у которых нет имени, связанного с ними. Итак, в этом отношении, в строке 2 выше, я предполагаю, что OR может быть И?

Это мю Пусковой ток при утверждении Mongoid

get '/currentstate*' do 
    StateTransaction.where(current: true, :position.in =>["SPVR", "CASH"]).to_json 

    end 

Любая помощь будет высоко оценен.

Спасибо!

+0

Я начинаю думать, что это не может быть сделано в одном операторе запроса. Я ничего не читал, что указывает на то, что это возможно. Я могу использовать any_of для части OR, но тогда это исключает AND. Я попробую другой маршрут. – user2843365

ответ

2

Он должен работать

StateTransaction.where(current: true, :name.ne => ["",nil]).and(
    StateTransaction.or(
    {:position.in =>["SPVR", "CASH"]}, 
    {sector: "BREAK"} 
).selector 
) 
+0

Спасибо за помощь, но, к сожалению, она не сработала. Похоже, что запрос по-прежнему ищет записи, где позиция SPVR или CASH, а сектор - BREAK. Если я сменил сектор: «BREAK» в другое поле, например, по электронной почте: «[email protected]», тогда он найдет мне все записи, где оба условия истинны (позиция = SPVR и email = [email protected]), вместо этого того или другого. – user2843365

+0

@ user2843365 Я обновил ответ –

+0

Отлично работает! Огромное спасибо!! – user2843365

Смежные вопросы