MongoDB mongoid 的 or 和 and 嵌套查询怎么写?

loveltyoic · October 20, 2013 · Last by loveltyoic replied at November 13, 2013 · 7556 hits

比如有一个时间段,用 c_start 和 c_end 表示开始和结束时间,然后每条数据也有一个开始和结束时间,我现在想查找: 开始时间在 c_start 和 c_end 之间 or 结束时间在 c_start 和 c_end 之间 目前我的写法如下,可以工作了,但是感觉不够简洁,想知道有没有更简洁的写法?

def self.in_callendar(c_start, c_end)
  any_of({ "$and" => [{ "start" => { "$gte" => c_start }}, { "start" => { "$lte" => c_end } }] }, { "$and" => [{ "end" => { "$gte" => c_start }}, { "end" => { "$lte" => c_end } }] })
end

简写 (把 and 合并)

def self.in_callendar(c_start, c_end)
  any_of({ "start" => { "$gte" => c_start, "$lte" => c_end }}, { "end" => { "$gte" => c_start, "$lte" => c_end }})
end

另外有个 between 方法,但只是单字段的 range 筛选,多字段要合并操作

You need to Sign in before reply, if you don't have an account, please Sign up first.