[SPRING] $ project 내부의 $ filter MongoDB 스프링 데이터 사용하기
SPRING$ project 내부의 $ filter MongoDB 스프링 데이터 사용하기
상위 문서의 배열 인 하위 문서가 있습니다. '기기'
그 배열에서 Date 속성 인 속성을 얻었습니다.
나는 자식 하위 문서를 포함하는 부모 문서를 다음과 같이 결정된 날짜별로 찾고 싶습니다.
{
"_id" : ObjectId("5818fa596969a1339093a7da"),
"fecha" : ISODate("2016-11-01T05:00:00.000Z"),
"spot" : "5808e3926969a126c8365c94",
"devices" : [
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
},
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
},
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
},
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
},
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
},
{
"evaluationDate" : ISODate("2016-11-01T20:26:00.000Z"),
"seenTimesCounter" : 0,
"category" : "PRE_PASAJERO",
"status" : "NO_CONECTADO"
}
]
}
나는 mongo shell에서 이것을 시도했다. (그리고 질의는 좋다. 내가 원하는 것을 돌려 준다.)
db.getCollection('spotMovimientos').aggregate([
{$match:{'devices.evaluationDate':ISODate("2016-11-01T20:26:00.000Z")}},
{$project: {
'devices':{$filter:{
input:'$devices',
as:'device',
cond: {$eq: ['$$device.evaluationDate', ISODate("2016-11-01T20:26:00.000Z")]}
}
} }
}
])
아무도 이것에 정성 들일 수 있습니까? 이것을 스프링 데이터로 변환하는 데 도움이 필요합니다.
고맙습니다.
해결법
-
==============================
1.나는 스프링 부트 버전 1.4.1.RELEASE로 내 문제를 해결할 수 있었다. 나는 이것을했다.
나는 스프링 부트 버전 1.4.1.RELEASE로 내 문제를 해결할 수 있었다. 나는 이것을했다.
Aggregation aggregation = newAggregation( match(Criteria.where("devices.evaluationDate").is(date)), project().and(new AggregationExpression() { @Override public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) { DBObject filterExpression = new BasicDBObject(); filterExpression.put("input", "$devices"); filterExpression.put("as", "device"); filterExpression.put("cond", new BasicDBObject("$eq", Arrays.<Object> asList("$$device.evaluationDate", date))); return new BasicDBObject("$filter", filterExpression); } }).as("devices") ); AggregationResults<SpotMovimientos> list = mongoOperations.aggregate(aggregation, MyClass.class, MyClass.class);
나는 이것에 기초하여 정교하게 만들었다. Spring Data MongoDb는 $ filter 배열 집계 연산자를 지원합니까?
내 프로젝트는 스프링 부트 1.4.0.RELEASE에 있었지만 그 버전에는 AggregationExpression 인터페이스 PUBLIC이 없었기 때문에 1.4.1.RELEASE로 업데이트되었고 제대로 작동했습니다.
-
==============================
2.그리고 이것은 스프링 - 데이터 -mongodb-2.0.10 (스프링 부트 2)
그리고 이것은 스프링 - 데이터 -mongodb-2.0.10 (스프링 부트 2)
Aggregation aggregation = newAggregation( match(Criteria.where("devices.evaluationDate").is(date)), project().and(new AggregationExpression() { @Override public Document toDocument(AggregationOperationContext aggregationOperationContext) { Document filterExpression = new Document(); filterExpression.put("input", "$devices"); filterExpression.put("as", "device"); filterExpression.put("cond", new Document("$eq", Arrays.<Object> asList("$$device.evaluationDate", date))); return new Document("$filter", filterExpression); } }).as("devices") );
from https://stackoverflow.com/questions/40391987/filter-inside-project-mongodb-using-spring-data by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안을 사용하여 프로그래밍 방식으로 사용자를 로그 아웃하는 방법 (0) | 2019.03.13 |
---|---|
[SPRING] Spring bean 프라퍼티를 프라퍼티 파일에서 자동으로 새로 고친다. (0) | 2019.03.13 |
[SPRING] JSR-303과 Spring의 Validator를 함께 사용하여 스프링 부트 엔드 포인트에 대한 사용자 정의 유효성 검증 로직 구현 (0) | 2019.03.13 |
[SPRING] Spring AOP가 런타임에 외부 항아리를 짜지 않는 이유는 무엇입니까? (0) | 2019.03.13 |
[SPRING] SpringBoot 프로젝트에서 PropertySourcesPlaceholderConfigurer가 환경에 등록되지 않았습니다. (0) | 2019.03.12 |