Nous avons essayé avec $ project (Agrégation) et Include Fields (Query), mais il inclut uniquement les champs Id et Filtered. Notre résultat attendu est d'avoir tous les champs du document avec le document incorporé filtré par les paramètres régionaux (clé dynamique).Besoin d'obtenir tous les champs avec le champ Agréger sans utiliser Inclure les champs dans la requête
Exemple:
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"
}
}
}]
Requête:
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();
Où se trouve votre requête d'agrégation? – barbakini
J'ai mis à jour la question –