2017-05-08 3 views
0

디바이스 용 상태 레코드를 유지하는 몽고 컬렉션이 있습니다. 따라서 장치 당 여러 개의 레코드가있을 수 있습니다. 내가 뭘하고 싶은지는 각 장치에 대한 최신 레코드를 가져 오는 mongoTemplate을 통해 쿼리를 작성하는 것입니다. Set를 < '문자열'에몽고 DB/중복 없음

  • 패스> name_ids, 일반 몽고 수집하지 _id 내에서 필드 또는
  • 각 장치에 대한 최신 기록을 얻을 _id 내에서 발견 : 여기

    은 제약의 일치하는 name_id.error가
  • 반환 목록 < 'DeviceStateData'> (단, 중복이 같은 name_id.error가 발견되지해야한다) 콜의

예 ection 개체 :
{
_id "241324123412",
name_id.error가 "flyingMan",
전원 상태 : "ON",
소인 ISODate ('')
}

감사

답변

1

당신이 보일 것입니다 Distinct 기능에.

Here 자세한 내용은 Spring을 참조하십시오.

0

아래의 집계 파이프 라인을 시도 할 수 있습니다.

아래 쿼리는 정렬 된 문서의 첫 번째를 선택하는 name_id$group 다음 name_idtimeStamp에 문서를 $sort 것입니다.

$$ROOT 전체 문서를 보관하십시오.

import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation; 
import static org.springframework.data.mongodb.core.query.Criteria.where; 

Aggregation aggregation = newAggregation(
       match(findCriteria), 
       sort(new Sort(Sort.Direction.DESC, "name_id", "timeStamp")), 
       group("name_id").first("$$ROOT").as("latest")); 

List<DeviceStateData> deviceData = mongoTemplate.aggregate(aggregation, DeviceStateData.class, DeviceStateData.class).getMappedResults(); 
+0

아쉽게도 현재 스프링 데이터 종속성이있는 집계를 사용할 수 없으며 쉽게 변경할 수 없습니다. 귀하의 회신을 보내 주셔서 감사합니다. – Sam