$ project(集計)と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
質問を更新しました –