Элементы filetr с использованием mongotemplate - агрегация при весенней загрузке - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь отфильтровать продукты по предложению «возврат денег», используя фильтр, но он не работает. Заранее спасибо

Мой метод sprinboot:

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
                }
            ]
        }
    ]

Класс моих продуктовObj 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
  }

Я пытаюсь отфильтровать объект на основе вышеупомянутых критериев (т. Е. Предложение кэшбэка). В классе сущностей Promotions содержится PromotionName и процент.

1 Ответ

0 голосов
/ 12 ноября 2018

Я нашел решение вместо простого критерия запроса, который я попытался агрегировать.

@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);
}

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

...