$ project (Aggregation) 및 Include Fields (Query)를 시도했지만 Id 및 Filtered 필드 만 포함합니다. 우리의 예상 된 결과는 임베디드 문서가 로케일 (동적 키)로 필터링 된 문서와 함께 모든 필드를 갖게되는 것입니다.쿼리에서 필드 포함을 사용하지 않고 집계 필드와 함께 모든 필드를 가져와야합니다.
예 :
categories:[{
_id: 1,
categoryNumber: "12345",
locale: {
en_US: {
name: "Category Name in US"
},
fr_FR: {
name: "Category Name in French"
}
}
},
{
_id: 2,
categoryNumber: "6789",
locale: {
en_GB: {
name: "Category Name in UK"
}
}
}]
Expected Result:
Filter records by locale: en_US(Embedded document key)
[{
_id: 1,
categoryNumber: "12345",
locale: {
en_US: {
name: "Category Name in US"
}
}
}]
검색어 :
AggregationOperation matchOperaion = match(where(Constants.ID).is(clientProdTypeId));
AggregationExpression aggregationExpression = (AggregationOperationContext) -> {
Map<String, Object> conditionMap = new HashMap<>();
conditionMap.put("input", "$locale.en_US.name");
conditionMap.put("as", Constants.NAME);
conditionMap.put("cond", new BasicDBObject());
return new BasicDBObject("$filter", conditionMap);
};
AggregationOperation projectionOperation;
projectionOperation = project().and(aggregationExpression).as(Constants.METADATA)
.andInclude(Constants.CLIENT_ID, Constants.PRODUCT_TYPE_ID,Constants.STATUS);
AggregationResults<CategoryDTO> result;
try {
result = mongoOperations.aggregate(newAggregation(matchOperaion, projectionOperation),
Category.class, CategoryDTO.class);
} catch (IllegalArgumentException | DataAccessException e) {
LOGGER.error("Error while fetching client product type", e);
}
return result.getUniqueMappedResult();
집계 쿼리는 어디에 있습니까? – barbakini
질문을 업데이트했습니다 –