正在回答 回答被采纳积分+1
3回答
电磁护盾
2022-07-02 18:22:05
/**
* @description 订单数据操作
*/
// 引用订单模型
const Order = require('../../models/Order')
// 引入地址model
const Adress = require('../../models/Address')
const Product = require('../../models/Product')
// 定义自执行匿名函数
!(async () => {
//创建订单
const requestBody = {
addressId: '62be4c7b1a01bc4ecf8bd998',
shopId: '62bee2b74aa42c8476c08652',
shopName: '沃尔玛',
isCanceled: false, //订单是否被取消
// 去数据库找沃尔玛的商品
products: [
{
id: '62bef44147ee77102dce56e1', // 复制?引用?
num: 3 //购买数量
},
{
id: '62bef44247ee77102dce56e4',
num: 5 //购买数量
}
]
}
// 通过addressId获取address
const adress = Adress.findById(requestBody.addressId)
// 根据商品id获取商品信息
// 获取商品列表
// 用数组的map函数可以取出商品id,map函数返回p.id
// 会得到一个数组pIds,里面分别是商品1的id,商品2的id
const pIds =requestBody.products.map(p => p.id) // ['商品1 id'],['商品2 id']
// 根据商品id去数据库中查找商品列表
const productList = await Product.find({
// 查询条件
shopId: requestBody.shopId, //沃尔玛的商品
// 判断当前查询的商品的_id要在数组pIds中
_id: {
$in: pIds
}
})
// console.log(pIds) // [ '62bef44147ee77102dce56e1', '62bef44247ee77102dce56e4' ]
// console.log(productList)
//整合订单购买数量
const productListWithSales = productList.map(p => {
// 商品 id,获取字符串形式
const id = p._id.toString()
// 找到商品的购买数量。 知道商品id,就能找到商品的购买数量
// 把requestBody.products用filter()进行筛选。从数组中找出id(item.id)能等于当前商品id的
const filterProducts = requestBody.products.filter(item => item.id === id)
// 如果过滤失败了了
if (filterProducts.length === 0) {
throw new Error('未找到匹配的销量数据')
}
// console.log(p+'<-----------1');
// console.log(filterProducts[0]+'<-----------2');
return {
product: p,
// mongoose6版本的写法
// product: {
// shopId: p.shopId,
// name: p.name,
// imgUrl: p.imgUrl,
// sales: p.sales,
// price: p.price,
// oldPrice: p.oldPrice
// },
orderSales: filterProducts[0].num
}
})
console.log(productListWithSales);
// 创建订单
await Order.create({
// 这里是确定的用户,所以直接写
username: 'zhangsan',
shopId: requestBody.shopId,
shopName: requestBody.shopName,
isCanceled: requestBody.isCanceled,
products: productListWidthSales
})
})()




恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星