首页 > 解决方案 > 如何在猫鼬中使用填充执行简单的乘法?

问题描述

我正在研究添加到购物车功能,并且正在尝试计算购物车中所有产品的小计。在我的购物车集合中,我有一组产品参考和用户选择的其他属性。特定产品变体的价格存储在产品集合中。当我查询购物车集合时,我想将所选数量乘以产品价格以获得小计。

我尝试的是使用 populate() 来获取变量字段,但我无法弄清楚如何仅过滤用户选择的变量。非常感谢任何帮助,谢谢你们。

await Cart.findOne({ user: userId }).populate({
      path: 'products.product',
      model: 'Product',
      select: 'variations',
      match: { colour: { $eq: 'Black' }, size: { $eq: 'M' } }, 
    });
const Cart = new mongoose.Schema({
  user: {
    type: ObjectId,
    ref: 'User',
  },
  products: [
    {
      product: { type: ObjectId, ref: 'Product' }, 
      colour: { type: String, required: true },
      size: { type: String, required: true },
      quantity: { type: Number, required: true },
    },
  ]
});

const Product = new Schema(
  {
    name: {
      type: String,
      required: true,
      trim: true,
    },
    variations: [
      {
        price: { type: Decimal128, required: true },
        quantity: { type: Number, required: true },
        colour: String,
        size: String,
      },
    ],
  },
);

编辑

购物车文档示例:

{ user: 605dcvaddee2a83299c7482b,
  products: [{
    product: { 
     variations: [
      { colour: Black, size: S, price: 45, quantity: 100 },
      { colour: Black, size: M, price: 50, quantity: 100 }, // need this price
      { colour: Black, size: L, price: 60, quantity: 100 },  
      ]
    },
    colour: 'Black', //selected by user
    size: 'M', //selected by user
    quantity: 20 //selected by user
  }]
}

我想要达到的目标:

{ 
  user: 605dcvaddee2a83299c7482b,
  products: [{
    product: { 
     variations: { colour: Black, size: M, price: 50, quantity: 100 }
    },
    colour: 'Black', //selected by user
    size: 'M', //selected by user
    quantity: 20 //selected by user
  }],
  subtotal: 1000
}

标签: javascriptmongodbmongoose

解决方案


推荐阅读