Я пытаюсь отфильтровать товары на основе предложения «кэшбэк» с помощью фильтра, но это не работает. Заранее спасибо.
Мой метод sprintboot:
public List<ProductsObj> getAllCashbackItems() {
Query query = new Query();
query.addCriteria(Criteria.where("listOfPromotions").in("cashback"));
Aggregation aggregation = newAggregation(
project().and(filter("listOfPromotions")
.as("item")
.by(valueOf(
"item.promotionName")
.equalToValue(
"cashback")))
.as("listOfPromotions")
);
return mongoTemplate.aggregate(aggregation, "productsObj", ProductsObj.class).getMappedResults();
}
Моя коллекция похожа:
[
{
"_id": "5be29135f590eb09a079951a",
"name": "tennis ball",
"price": "1500",
"category": "sports",
"listOfPromotions": [
{
"promotionName": "cashback",
"percentage": 12
}
]
},
{
"_id": "5be29142f590eb09a079951b",
"name": "volley ball",
"price": "600",
"category": "sports",
"listOfPromotions": [
{
"promotionName": "dham dhamaal",
"percentage": 6
}
]
},
{
"_id": "5be2914ef590eb09a079951c",
"name": "Dinning table",
"price": "15000",
"category": "furnitures",
"listOfPromotions": [
{
"promotionName": "cashback",
"percentage": 6
},
{
"promotionName": "dham dhamaal",
"percentage": 10
}
]
}
]
Мой класс ProductsObj POJO: -
@Document(collection = "productsObj")
public class ProductsObj {
@Id
public ObjectId _id;
@Indexed
public String name;
public String price;
public String category;
public List<Promotion> listOfPromotions;
//constructors
//getters and setters
}
Я пытаюсь отфильтровать объект на основе вышеупомянутых критериев (например, предложение кэшбэка). В классе сущностей «Рекламные акции» содержится название акции и процент.