首页
学习
活动
专区
圈层
工具
发布

猫鼬
EN

Stack Overflow用户
提问于 2021-02-16 12:12:43
回答 1查看 174关注 0票数 1

我有一些问题

ObjectId.

  • There
  1. Cant填充CartProduct,只是显示CartProduct是每次创建CartProduct时自动添加的方式?cart.
  2. 这是模式结构的正确方式吗?

购物车

代码语言:javascript
复制
 const CartSchema = new Schema({
  active: { type: Boolean, required: true, default: true },
  createAt: { type: Date, default: Date.now },
  client: { type: Schema.Types.ObjectId, ref: "User", required: true },
 products: [{ type: Schema.Types.ObjectId, ref: "CartProduct" }],
 });

 const Cart = model("Cart", CartSchema);

手推车产品

代码语言:javascript
复制
const CartProductSchema = new Schema({
item: { type: Schema.Types.ObjectId, ref: "Product", required: true },
cart: { type: Schema.Types.ObjectId, ref: "Cart", required: true },
quantity: { type: Number, required: true },
totalPrice: { type: Number, required: true },
});

const CartProduct = model("CartProduct", CartProductSchema);

产品

代码语言:javascript
复制
 const ProductSchema = new Schema({
 name: { type: String, required: true },
 price: { type: Number, required: true },
 image: { type: String, required: true },
 category: { type: Schema.Types.ObjectId, ref: "Category", require: true },
  });

 const Product = model("Product", ProductSchema);

手推车控制器

代码语言:javascript
复制
router.post("/", async (req, res) => {
 try {
  const { userId } = req.body;
   const cart = await Cart.findOne({ client: userId 
  }).populate("CartProduct");

   if (cart === null) {
     const newCart = new Cart({
       client: userId,
     });

    await newCart.save();

   return res.status(201).send({ cart: newCart });
  }

   res.status(200).send({ cart });
 } catch (error) {
   res.status(500).send(error);
   }
  });

将产品添加到购物车

代码语言:javascript
复制
router.post("/addProductToCart", async (req, res) => {
try {
const { item, cart, quantity, price } = req.body;

const newProduct = new CartProduct({
  item,
  cart,
  quantity,
  totalPrice: price * quantity,
});

await newProduct.save();

await Cart.findOneAndUpdate(
  { _id: cart },
  { $push: { products: newProduct } },
  {
    new: true,
  }
);

res.status(201).send({ message: "New Product Added To Cart" });
} catch (error) {
  res.status(500).send(error);
}
});

将产品添加到购物车中确实有效,但填充不起作用。

添加输出

代码语言:javascript
复制
{
"cart": {
    "active": true,
    "products": [
        "602bc081daf867167c2eb5da"
    ],
    "_id": "602aab802f625d1654805ef0",
    "client": "601c50211c94cf5d642c67fb",
    "createAt": "2021-02-15T17:12:32.997Z",
    "__v": 0
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-16 12:15:54

你失踪的{ in cartSchema

代码语言:javascript
复制
 const CartSchema = new Schema({
  active: { type: Boolean, required: true, default: true },
  createAt: { type: Date, default: Date.now },
  client: { type: Schema.Types.ObjectId, ref: "User", required: true },
 products: [{ type: Schema.Types.ObjectId, ref: "CartProduct" }],
 });

输出像这样的模型

代码语言:javascript
复制
module.exports = Cart 

有办法使每次CartProduct创建时,自动添加到?购物车

没有自动将新的_id of CartProduct添加到collection的方法,因此您应该使用findOneAndUpdate()find()push in to products arraysave()

是模式结构的正确方式吗?

是的,是的。

因此,对于填充,您可以尝试:

代码语言:javascript
复制
let resultCarts = await Cart.find(filter).populate("products")
let resultProducts = await Product.find(filter).populate("category")

因此,将CartProduct更改为products,因为应该将字段名称作为参数传递,而不是模式名称。

代码语言:javascript
复制
await Cart.findOne({ client: userId 
  }).populate("products");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66224104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档