2014-11-06 61 views
0

我想執行以下兩個只有一個mongoid查詢的mongoid查詢。我試圖在Mongoid文檔中尋找解決方案,但找不到任何解決方案。執行一個Mongoid查詢,而不是兩個單獨的Mongoid查詢

查詢1

Event.where(:start_time.gte => current_date.to_s, :start_time.lte => date_after_2_weeks.to_s) 

查詢2

Event.where(:stop_time.gte => current_date.to_s, :stop_time.lte => date_after_2_weeks.to_s) 

有隻有一個執行上述兩個單獨的查詢的方法嗎?請幫忙。我非常感謝。

感謝, -Parash-

+1

如果你解釋了兩個查詢的要點是什麼,它可能會有所幫助。你想要兩個結果集的組合還是「聯合」?還是你在結果的共同點或「交叉點」之後? – 2014-11-06 15:43:45

+0

謝謝你的回覆,尼爾。我想要兩個結果集的聯合。 – 2014-11-06 15:45:36

+0

然後「不可以做醫生瓊斯」。兩個結果集的聯合僅通過**兩個**查詢(最好並行地,您的語言和庫支持這一點)來實現。 MongoDB不會執行SQL類型「聯合」查詢或任何其他形式的「加入」 – 2014-11-06 15:49:10

回答

0

嘛總是有提供從底層驅動程序只需拔「原始」,真正蒙戈語法。

A 「聯盟」 基本上意味着$or

Event.collection.find({ 
    "$or" => [ 
     { "start_time" => { 
      "$gte" => current_date.to_s, 
      "$lte" => date_after_2_weeks.to_s 
     }, 
     { "stop_time" => 
      "$gte" => current_date.to_s, 
      "$lte" => date_after_2_weeks.to_s 
     } 
    ] 
}) 

和一個 「交叉點」 的基本意思$and

Event.collection.find({ 
    "start_time" => { 
     "$gte" => current_date.to_s, 
     "$lte" => date_after_2_weeks.to_s 
    }, 
    "stop_time" => { 
     "$gte" => current_date.to_s, 
     "$lte" => date_after_2_weeks.to_s 
    } 
}) 

這是隱含的,你可能會聚集。所以不需要特定的操作數。字段名稱畢竟是不同的。

也許有一種「有問題的」方式來做到這一點,但特定的語法總是有效的。

+0

但是通過Moped(即'Event.collection')只是給了你一堆Hashes,所以它不是非常有用的查詢。 – 2014-11-06 18:07:11

+0

相同的語法應與Event.where() – kuadrosx 2014-11-06 21:09:34

+0

一起工作感謝大家的幫助。 $或查詢完成了這項工作。我用它作爲@kuadrosx建議的Event.where()。 – 2014-11-07 06:16:52