我在尝试将特定订单与特定产品关联时遇到问题。我是node.js的新手,我想添加一个产品(关联并填充订单),然后重定向到显示我创建的产品的所有订单的页面
创建了产品和订单模式(对其他模式不太确定)...
这是我的产品型号
next
这是订单模型:
var mongoose= require("mongoose");
var productSchema = new mongoose.Schema({
name:String,
brand:String,
price: Number,
image: String,
description:String,
featured: Boolean,
});
module.exports= mongoose.model("Product", productSchema);
例如,我希望使用var mongoose = require("mongoose");
var orderSchema= new mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
products:[
{
type: mongoose.Schema.Types.ObjectId,
ref:"Product", required:true
}
]
,
quantity :{type:Number, default:1}
});
module.exports=mongoose.model("Order",orderSchema);
方法将此模型关联在一起,进行填充,然后出现在路径(“ mongoose
)上。例如,我是编程新手,因此最简单的答案将不胜感激。
答案 0 :(得分:0)
这是一个使用Express.Js的小示例,在此示例中,我创建了3个模型:
D
我的D
将嵌入客户订购的产品,我选择将产品存储为subdocuments,因为我的库存很少,您也可以选择存储references。 br />
注意:我每个客户仅引用一个订单,您可以选择其他方式,然后在// Models
const productSchema = new mongoose.Schema({
name:String
});
var orderSchema= new mongoose.Schema({
products:[productSchema]
});
const clientSchema = new mongoose.Schema({
name: String,
order: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Order'
}
})
const Product = mongoose.model('Product', productSchema);
const Client = mongoose.model('Client', clientSchema);
const Order = mongoose.model('Order', orderSchema);
中将订单字段放入数组(orderSchema
)中
在我的控制器中,我有2种方法:一种创建订单,另一种向订单添加产品。
clientSchema
我知道需要两种方法:一种是使用所有可用产品绘制表格,另一种是使用已订购商品绘制购物车。
order: [{ /* type...*/}]
我需要两个(由路由处理程序渲染):
// Controller
const createOrder = (userId, productId) => {
Product.findOne({_id: productId}) // find a product
.exec()
.then(product => new Order({products: [product]}).save()) // save the products into the order
.then(order => Client.findOneAndUpdate({_id: userId}, {$set: {order: order}}).exec())// update the client document with the new order
.then(client => res.json(client)); // respond with json
// .catch(err => console.log(err))
}
const addToOrder = (userId, productId) => {
return Product.findOne({_id: productId}) // find the product
.exec()
.then(product => {
return Client.findOne({_id: userId})//find the client
.populate({ path: 'order', populate: { path: 'order.products' } })
.exec() //populate in order to access client.order.products
.then(client => {
client.order.products.push(product);
return client.order.save();
})
})
// .catch(err => console.log(err));
}
我希望这会有所帮助。