【发布时间】:2021-03-25 12:57:53
【问题描述】:
我正在制作一个电子商务应用程序,我正在尝试创建 1 个文档“产品”,其中包含“评论”和“面料”的架构。每个产品都有不止一种面料,每种面料都有自己的一套尺寸,具体取决于产品的类型(配件、加码、标准等)。
我正在尝试使用 mongoose 鉴别器将它们嵌套在 Product 模型中的“fabrics”数组中。
尝试导入数据时出现错误,我一直在更改设置以尝试使其无法正常工作。我已经阅读了鉴别器文档以及大约 30 篇关于猫鼬鉴别器的不同帖子。
我在此设置中遇到的错误是“TypeError: Product.path is not a function”
这就像我尝试连接鉴别器的第 15 种不同方式,所有这些都是基于人们似乎认为对他们有用的其他帖子。
任何帮助将不胜感激!
我当前的代码是:
const reviewSchema = mongoose.Schema(
{
name: { type: String, required: true },
rating: { type: String, required: true },
comment: { type: String, required: true },
},
{
timestamps: true,
}
)
const fabricSchema = new mongoose.Schema({
fabricId: { type: String, required: true },
fabricImage: { type: String, required: true },
})
const Product = mongoose.model(
'Product',
new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User',
},
sku: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
image: {
type: String,
required: true,
},
category: {
type: String,
required: true,
},
fabricType: {
type: String,
required: true,
},
details: {
type: String,
required: true,
},
reviews: [reviewSchema],
rating: {
type: Number,
required: true,
default: 0,
},
numReviews: {
type: Number,
required: true,
default: 0,
},
price: {
type: Number,
required: true,
},
wholesalePrice: {
type: Number,
required: true,
},
sale: {
type: Object,
required: true,
onSale: {
type: Boolean,
required: true,
default: false,
},
salePrice: { type: Number },
},
fabrics: [fabricSchema],
})
)
const productType = Product.path('fabrics')
const standardProduct = productType.discriminator(
'standardProduct',
new mongoose.Schema({
availableSizes: {
xs: { type: Number, required: true, default: 0 },
s: { type: Number, required: true, default: 0 },
m: { type: Number, required: true, default: 0 },
l: { type: Number, required: true, default: 0 },
xl: { type: Number, required: true, default: 0 },
},
})
)
const plusSizeProduct = productType.discriminator(
'plusSizeProduct',
new mongoose.Schema({
availableSizes: {
oneX: { type: Number, required: true, default: 0 },
twoX: { type: Number, required: true, default: 0 },
},
})
)
const accessoryProduct = productType.discriminator(
'accessoryProduct',
new mongoose.Schema({
availableSizes: {
os: { type: Number, required: true, default: 0 },
},
})
)
export { Product, standardProduct, plusSizeProduct, accessoryProduct }
【问题讨论】:
-
官方文档是怎么说的?
-
如何实际实现它相当复杂。我按照使用 discriminatorKey 和 'schema'.path() 给出的示例进行操作,将它们连接起来......但我得到了一系列如上所述的错误。我一直在玩它,并且有一个可以导入数据的新数据模型,但它为 fabrics 数组中的每个对象遗漏了“availableSizes”。
标签: javascript node.js reactjs mongodb mongoose