0

MongoDB 및 Spring mongotemplate을 처음 사용합니다. Postgres에있는 해당 mongotemplate을 사용하여 쿼리를 작성하고 싶습니다.mongo 템플릿을 사용한 내부 쿼리

select * from feedback 
where feedback.outletId in (
    select outletId from feedback 
    where feedback.createdOn >= '2013-05-03'::date 
) 

MongoDB에서도이 문제가 발생합니까?

+0

피드백이 'feedback * from select * from feedback.createdOn> ='2013-05-03 ':: date'와 다른 점은 어떻게 하나의 테이블'feedback'에서 쿼리하는 것입니까? – chridam

+0

쿼리는 주어진 시간 이후에 생성 된 피드백을 반환합니다. 내가 원했던 것은 주어진 시간 이후에 최소한 하나의 피드백이 생성 된 모든 피드백 (주어진 시간 이전에 만들어진 경우에도)이었습니다. –

답변

0

MongoDB에서 내부 쿼리의 개념이 없으므로 기본적으로 2 개의 쿼리로 구현할 수 있지만 이미 알고 있고 '더 나은'솔루션을 원할 것입니다. 이 가능한지 물어봤을 때이라고 생각 했으므로 까다로울 수 있지만 집계로 달성 할 수 있다고 생각합니다.

db.feedback.aggregate([ 
      {$project : { 
        'outletId' : 1, 
        'feedback._id' : '$_id', 
        'feedback.createdOn' : '$createdOn', 
        'feedback.a' : '$a' 
        }}, 
      {$group : { 
        _id : $outletId, 
        feedbacks : {$addToSet : '$feedback'} 
        }}, 
      {$match : { 
        'feedbacks.createdOn' : { 
         $gte : ISODate('2013-05-03')} 
         }}, 
      {$unwind : '$feedback'}]); 

끝에 $ 프로젝트 단계를 하나 더 추가하여 자식 개체를 문서의 값으로 설정할 수 있습니다. 내가

먼저 우리는 피드백라는 아이 필드 내에서 필요한 모든 필드를 가하고있는 문서를 프로젝트, 꽤 보이지 않는,하지만 난 그것을 단계적으로 설명 할 알고 두 번째 단계에서

우리는 그것을 분류 outletId에 의해 모든 자식 피드백을 feedbacks라는 배열에 넣습니다 (각 outletid에 대해 모든 피드백을받습니다). 그 outletIds가 필터링 한 후 세 번째 단계에서

우리는 우리가 서로 아이를 얻기 위해 긴장을 풀고 호출 createdOn 필드에 설정된 날짜보다 큰 배열에서 단 한 번의 피드백이없는 경우

, 필터링 $ 일치를 사용 피드백 배열을 하나의 문서로 만듭니다.

이제 우리는 mongoTemplate에 대해 이야기 할 때, 그렇습니다. 첫 번째 단계에서 의견의 중첩을 포함하여 집합에 대한 모든 매개 변수를 허용합니다. 당신이 있음에 작동하지 않습니다 대신에 타임 스탬프 또는 ISODate도 정상 몽고 쿼리 문자열로 createdOn 필드를 저장하는 경우 단지 TypedAggregation

의 몇 가지 예를 보려면 당신은 당신의 포스트 그레스 예에서의 작업으로 범위를 찾을 필요가있을 때 .

희망이 있습니다.