Элементы Filetr с использованием mongotemplate - агрегация при весенней загрузке

Я пытаюсь отфильтровать товары на основе предложения «кэшбэк» с помощью фильтра, но это не работает. Заранее спасибо.

Мой метод 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
  }

Я пытаюсь отфильтровать объект на основе вышеупомянутых критериев (например, предложение кэшбэка). В классе сущностей «Рекламные акции» содержится название акции и процент.


person Rajasekar Sambandam    schedule 09.11.2018    source источник
comment
какой ORM вы используете?   -  person Alok Deshwal    schedule 09.11.2018
comment
Необработанный запрос mongodb будет работать для вас?   -  person Alok Deshwal    schedule 09.11.2018
comment
Какая часть не работает? Ваш запрос выглядит правильно. Можете ли вы показать нам класс productobj pojo?   -  person s7vr    schedule 09.11.2018
comment
Я обновил pojo @Veeram   -  person Rajasekar Sambandam    schedule 12.11.2018
comment
Я использую SpringData @alok   -  person Rajasekar Sambandam    schedule 12.11.2018
comment
Спасибо, ребята .. Я нашел решение. Я пытался с агрегацией, но я решил с помощью простого запроса критериев.   -  person Rajasekar Sambandam    schedule 12.11.2018


Ответы (1)


Я нашел решение вместо простого запроса критериев, я попробовал агрегацию.

@RequestMapping(value = "/getcashbackitems", method = RequestMethod.GET)
public List<ProductsObj> getAllCashbackItems() {
    Query query = new Query();
    query.addCriteria(Criteria.where("listOfPromotions.promotionName").is("cashback"));
    return mongoTemplate.find(query, ProductsObj.class);
}

Спасибо за ваши ответы :)

person Rajasekar Sambandam    schedule 12.11.2018