2016-04-27 27 views
0

我有一个嵌入子订单。我正在请求仅查找今天发送的子订单。当我用两个子句使用elem_match时,它似乎链式包含。对于我来说这似乎很奇怪,因为在where子句内部链接是排他性的。有没有办法使elem_match标准独占?Elem_match不链接“和”在mongoid请求

first_minute = Time.mktime(Time.now.year, Time.now.month, Time.now.day, 0, 0) 
last_minute = Time.mktime(Time.now.year, Time.now.month, Time.now.day, 0, 59) 

# Fails sent_at.gte but returns the order anyways 
orders = Order.where(:sub_orders.elem_match => {:sent_at.gte => first_minute, :sent_at.lte => last_minute }) 

# Fails sent_at.gte and returns what I would expect 
orders = Order.where(:sub_orders.elem_match => {:sent_at.gte => first_minute}) 

回答

0

我结束了使用聚合方法。无论出于何种原因,这允许我在elem_match没有时查询gte和lte。

orders = Order.collection.aggregate([ 
    {"$unwind" => "$sub_orders"}, 
    {"$match" => { 
    "sub_orders.sent_at" => {"$gte" => day_ago, "$lte" => now} 
    }} 
])