2017-01-31 21 views
1

我正在使用MongoDB创建一个新应用程序,我只需要它的某些数据。我需要以下字段:当前(布尔),位置,扇区和名称。位置字段填入四个值之一 - “现金,SPVR,OFF和培训”,而扇区字段具有两个值之一 - “分手或工作”。我想要一个查询,它会给我所有记录以下条件: 1.当前= TRUE 2.位置=“SPVR”或“CASH”或扇区=“BREAK”和 3.名称不为NULL具有AND和OR条件的Mongoid查询

我遇到的问题是,有数百条记录的值为BREAK,但其中大多数记录的名称字段中没有值。我不希望任何没有与他们关联的姓名的记录。所以在这方面,在上面的第2行中,我猜测OR可能是AND?

这是目前每亩开始在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]”,那么它会找到所有条件均为真的记录(position = SPVR和email = [email protected]),而不是一个或另一个。 – user2843365

+0

@ user2843365我已经更新了答案 –

+0

很棒!非常感谢!! – user2843365