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

loveltyoic · 2013年10月20日 · 最后由 loveltyoic 回复于 2013年11月13日 · 7567 次阅读

比如有一个时间段,用 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 筛选,多字段要合并操作

需要 登录 后方可回复, 如果你还没有账号请 注册新账号