【问题标题】:Mongoid query with AND and OR condition具有 AND 和 OR 条件的 Mongoid 查询
【发布时间】:2018-04-22 06:11:31
【问题描述】:

我正在为我正在创建的新应用程序使用 MongoDB,我只需要其中的某些数据。我需要以下字段:当前(布尔)、位置、部门和名称。头寸字段填充四个值之一 - “现金、SPVR、OFF 和培训”,而扇区字段具有两个值之一 - “休息或工作”。我想要一个查询,它将为我提供存在以下条件的所有记录: 1. 电流 = TRUE 2. Position = "SPVR" or "CASH" OR Sector = "BREAK" and 3.名称不为NULL

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

这是 mu 当前开始于 Mongoid 语句

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

  end

任何帮助将不胜感激。

谢谢!!

【问题讨论】:

  • 我开始认为这不能在一个查询语句中完成。我读过的任何内容都没有表明这是可能的。我可以将 any_of 用于 OR 部分,但这样就省略了 AND。我会尝试另一条路线。

标签: mongodb mongoid


【解决方案1】:

它应该可以工作

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

【讨论】:

  • 感谢您的帮助,但不幸的是,它不起作用。查询似乎仍在查找位置为 SPVR 或 CASH 且扇区为 BREAK 的记录。如果我将扇区:“BREAK”更改为另一个字段,例如电子邮件:“xx@yy.com”,那么它将找到我所有条件都为真的记录(位置 = SPVR 和电子邮件 = xx@yy.com),而不是一种或另一种。
  • 效果很好!非常感谢!!
【解决方案2】:

以下可以说更简单:

sts = StateTransaction.where(current: true, :name.ne => ["",nil])
sts.any_of(:position.in => ["SPVR", "CASH"], sector: 'BREAK')

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多