2016-04-27 11 views
0

Ich habe eine Bestellung mit embeded sub_orders. Ich mache eine Anfrage, nur Unteraufträge zu finden, die heute gesendet wurden. Wenn ich elem_match mit zwei Klauseln verwende, scheint es, einschließlich zu ketten. Dies erscheint mir merkwürdig, da die Verkettung innerhalb einer Where-Klausel exklusiv ist. Gibt es eine Möglichkeit, elem_match Kriterien exklusiv zu machen?Elem_match nicht verkettet "und" in Mongoid Anfrage

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}) 

Antwort

0

Ich endete mit der Aggregatmethode. Aus welchem ​​Grund auch immer, dies erlaubt mir, gte und lte abzufragen, wenn elem_match dies nicht tut.

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