0

I want to find a brand and then sort the product associated with the brand in ascending and descending order on the basis of price. I tried but it is not changing anything. is it possible with mongoose or what else code i must add?

Controller


exports.getBrandLowtoHighPrice = (req, res, next) => {

    const page = +req.query.page || 1; //convert to number
    let totalItems;
  
    let sessionUser = req.user;
    if (typeof sessionUser == "undefined") {
      sessionUser = "guest";
    }
    Brand.findById(req.params.id)
      .sort({'product.createdAt' : -1})
      .skip((page - 1) * ITEM_PER_PAGE) 
      .limit(ITEM_PER_PAGE)
      .populate({
        path: "product",
        populate: {
          path: "category",
          model: "Category",
        },
        populate: {
          path: "subCategory",
          model: "SubCategory",
        },
        populate: {
          path: "brand",
          model: "Brand",
        },
        populate: {
          path: "rating",
          model: "Rating",
        },
      })
      .then((products) => {
        console.log(products)
        res.render("user/single-brand", {
          categories: req.categories,
          subCategories: req.subCategories,
          bestSeller: req.bestSeller,
          products: products.product,
          brand: req.brand,
          user: sessionUser,
          banner: req.banner,
          brandId: req.params.id,
          currentPage: page,
          hasNextPage: ITEM_PER_PAGE * page < totalItems,
          hasPreviousPage: page > 1,
          nextPage: page + 1,
          previousPage: page - 1,
          lastPage: Math.ceil(totalItems / ITEM_PER_PAGE),
          
        });
      })
      .catch((err) => {
        console.log(err);
      })
  }

Here i have tried sort but not working. My data structure looks like this Data

{
   product:[
     {
      category: [Array],
      subCategory: [Array],
      brand: [Array],
      rating: [],
      sellCount: '1',
      color: [Array],
      size: [Array],
      image: [Array],
      _id: 60f444ace8568b2fec481dcf,
      title: 'nvhjm m',
      description: 'hello',
      price: 200,
      discount: 2,
      quantity: 9,
      feature: false,
      active: true,
      stock: true,
      createdAt: 2021-07-18T15:11:40.047Z,
      updatedAt: 2021-07-20T01:23:06.113Z,
      __v: 0
    }
  ],
  _id: 60e14e4a94e27f3a2c93a26f,
  brand: 'Acer',
  image: 'images\\2021-07-04T05-59-38.028Z-download.png',
  createdAt: 2021-07-04T05:59:38.042Z,
  updatedAt: 2021-07-18T15:11:40.056Z,
  __v: 0
}

I want to sort my value on basis pf product price. Thank you!

1

2 Answers 2

1

This might can help you :

const Brand =  require('../../model/admin/brand')

exports.getBrandLowtoHighPrice = (req, res, next) => {

    const page = +req.query.page || 1; //convert to number
    let totalItems;
  
    let sessionUser = req.user;
    if (typeof sessionUser == "undefined") {
      sessionUser = "guest";
    }
    Brand.findById(req.params.id)
      .sort({'product.createdAt' : -1})
      .skip((page - 1) * ITEM_PER_PAGE) 
      .limit(ITEM_PER_PAGE)
      .populate({
        path: "product",
        populate: {
          path: "category",
          model: "Category",
        },
        populate: {
          path: "subCategory",
          model: "SubCategory",
        },
        populate: {
          path: "brand",
          model: "Brand",
        },
        populate: {
          path: "rating",
          model: "Rating",
        },
        options: { sort: { 'price': 1 } }
      })
      /* .populate({path: 'housingposts', options: { sort: { 'date': -1 } } }) */
      .then((products) => {
        console.log(products)
        res.render("user/single-brand", {
          categories: req.categories,
          subCategories: req.subCategories,
          bestSeller: req.bestSeller,
          products: products.product,
          brand: req.brand,
          user: sessionUser,
          banner: req.banner,
          brandId: req.params.id,
          currentPage: page,
          hasNextPage: ITEM_PER_PAGE * page < totalItems,
          hasPreviousPage: page > 1,
          nextPage: page + 1,
          previousPage: page - 1,
          lastPage: Math.ceil(totalItems / ITEM_PER_PAGE),
          
        });
      })
      .catch((err) => {
        console.log(err);
      })
  }
Sign up to request clarification or add additional context in comments.

Comments

0

Check out the $expr, it enables you to compare two field vale together. or checkout the array mql operators it might be of help.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.