Node.js MERN中的排序

Node.js MERN中的排序,node.js,mongodb,Node.js,Mongodb,Idea:我想在多种条件下对我的产品进行排序,如按createdAt按desc或asce排序、按价格排序等。 问题:两者都很好,但我如何根据用户的要求检查需要排序的内容,我们需要按createdAt或price对产品进行排序 这是代码 const getProducts = async (req, res) => { try { const sortQuery = req.query.sort; console.log(sortQuer

Idea:我想在多种条件下对我的产品进行排序,如按createdAt按desc或asce排序、按价格排序等。 问题:两者都很好,但我如何根据用户的要求检查需要排序的内容,我们需要按createdAt或price对产品进行排序

这是代码

    const getProducts = async (req, res) => {
      try {

        const sortQuery = req.query.sort;
        console.log(sortQuery);

        const productMessages = await productMessage
          .find({})
          .sort({
            createdAt: sortQuery,
            price: sortQuery,
          })
          .populate("categoryId")
          .exec();
        // const productMessages = await productMessage.find();
        res.status(201).json(productMessages);
      } catch (error) {
        res.status(404).json({ message: error.message });
      }
    };
在这里,如果我发送查询以按价格对产品进行排序,它将给出按createdAt而不是按价格排序的产品的结果

输入:1//按价格对产品进行排序
输出:按createdAt/排序的产品,但我需要使用价格,您可以在执行前进行检查


您必须在查询中传递sortField。

您应该只查询一次数据,然后将其呈现为按任意值排序。
const getProducts = async (req, res) => {
      try {
        const sortQuery = req.query.sort;
        console.log(sortQuery);
        
        let sortObject = {};
        if (req.query.sortField == "createdAt") {
           sortObject["createdAt"] = sortQuery
        } else if (req.query.sortField == "price") {
           sortObject["price"] = sortQuery
        }

        const productMessages = await productMessage
          .find({})
          .sort(sortObject)
          .populate("categoryId")
          .exec();
        // const productMessages = await productMessage.find();
        res.status(201).json(productMessages);
      } catch (error) {
        res.status(404).json({ message: error.message });
      }
    };