2014-11-06 1 views
0

하나의 몽고이 쿼리로 다음 두 가지 몽고이 쿼리를 수행하려고합니다. 나는 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

두 쿼리의 요점을 설명하면 도움이 될 수 있습니다. 두 결과 세트의 결합 또는 "결합"을 원하십니까? 또는 결과의 공통점 또는 "교차점"이후입니까? –

+0

답장을 보내 주셔서 감사합니다, Neil. 두 결과 세트의 결합이 필요합니다. –

+0

그 다음 "No는 닥터 존스를 할 수있다". 두 결과 집합의 합집합은 ** 두 개의 ** 쿼리 (언어와 라이브러리가 지원하는 병렬 처리가 바람직 함)에 의해서만 결정됩니다. MongoDB는 SQL 타입 "union"질의 또는 "join"의 다른 형태를하지 않습니다. –

답변

0

그럼 언제나 기본 드라이버에서 잡아 당겨 사용할 수있는 정말 "원시"과 몽고 구문이 있습니다.

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 의미 :

A "노조는"기본적으로 $or 의미는 수집 하듯이 암시 적

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

. 따라서 특정 피연산자가 필요 없습니다. 결국 필드 이름이 다릅니다.

"railsy"방법이있을 수 있지만 특정 구문은 항상 작동합니다.

+0

그러나 Moped (즉,'Event.collection')를 통해 가면 해시 뭉치를 얻을 수 있으므로 쿼리하는 데별로 유용하지 않습니다. –

+0

동일한 구문이 Event.where()와 함께 작동해야합니다. – kuadrosx

+0

도움을 주신 모든 분들께 감사드립니다. $ 또는 쿼리가 작업을 수행했습니다. @ kuadrosx가 제안한대로 Event.where()와 함께 사용했습니다. –