mongoose 如何在.sort()方法之前修改Model.find()中数据

gr8qqesn  于 2023-01-13  发布在  Go
关注(0)|答案(1)|浏览(132)

我想创建一个名为finalPrice的新字段,finalPrice将包含basePrice - discountPrice,我想对finalPrice进行排序

// Find marketItem by item
    const itemType = req.query?.itemType?.split(',');
    marketItem = await MarketItem.find({
      $and: [
        (req?.query?.itemType
          ? {
              item: { $in: _ids },
              itemType: { $in: itemType }
            }
          : {
              item: { $in: _ids }
            },
        { $push: { finalPrice: "basePrice" - "dscountPrice" } })
      ]
  })
      .limit(limit)
      .skip(startIndex)
      .populate('item')
      .sort(
        req.query.sortPrice && req.query.sortDate
          ? { price: Number(req.query.sortPrice), createdAt: Number(req.query.sortDate) }
          : req.query.sortPrice
          ? { price: Number(req.query.sortPrice) }
          : req.query.sortDate
          ? { createdAt: Number(req.query.sortDate) }
          : { createdAt: -1 }
      );

我想创建一个名为finalPrice的新字段,finalPrice将包含basePrice - discountPrice,我想使用.sort()方法对finalPrice进行排序,或者有人知道最佳答案吗?我的观点是创建一个新字段finalPrice = basePrice - discountPrice,我想对finalPrice进行排序

sgtfey8w

sgtfey8w1#

// Find marketItem based on itemTypes
const marketItem = await MarketItem.aggregate([
  req?.query?.itemType
    ? {
        $match: { item: { $in: _ids }, itemType: { $in: itemType } }
      }
    : {
        $match: { item: { $in: _ids } }
      },
  {
    $addFields: {
      finalPrice: { $subtract: ['$price.basePrice', '$price.discountPrice'] }
    }
  }
])
  .sort(
    req.query.sortPrice && req.query.sortDate
      ? { finalPrice: Number(req.query.sortPrice), createdAt: Number(req.query.sortDate) }
      : req.query.sortPrice
      ? { finalPrice: Number(req.query.sortPrice) }
      : req.query.sortDate
      ? { createdAt: Number(req.query.sortDate) }
      : { createdAt: -1 }
  )
  .skip(startIndex)
  .limit(limit)
  .exec();

相关问题