Javascript 如何将mongoose中的鉴别器连接到父文档?尝试导入数据时出错
我正在制作一个电子商务应用程序,我正在尝试创建一个文档“products”,其中包含一个“reviews”和“fabrics”模式。每种产品都有一种以上的面料,每种面料都有自己的尺码,具体取决于产品类型(配件、加上尺码、标准等) 我正试图使用猫鼬鉴别器,使这些嵌套在产品模型的“织物”数组中 我在尝试导入数据时遇到一个又一个错误,我一直在更改设置以尝试使其无效。我已经阅读了鉴别器文档以及大约30篇关于猫鼬鉴别器的不同帖子 我在这个设置中遇到的错误是“TypeError:Product.path不是函数” 这就像我尝试连接歧视者的第15种不同方式,所有这些都基于人们似乎说为他们工作的其他帖子 任何帮助都将不胜感激 我当前的代码是:Javascript 如何将mongoose中的鉴别器连接到父文档?尝试导入数据时出错,javascript,node.js,reactjs,mongodb,mongoose,Javascript,Node.js,Reactjs,Mongodb,Mongoose,我正在制作一个电子商务应用程序,我正在尝试创建一个文档“products”,其中包含一个“reviews”和“fabrics”模式。每种产品都有一种以上的面料,每种面料都有自己的尺码,具体取决于产品类型(配件、加上尺码、标准等) 我正试图使用猫鼬鉴别器,使这些嵌套在产品模型的“织物”数组中 我在尝试导入数据时遇到一个又一个错误,我一直在更改设置以尝试使其无效。我已经阅读了鉴别器文档以及大约30篇关于猫鼬鉴别器的不同帖子 我在这个设置中遇到的错误是“TypeError:Product.path不是
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:'kind'}移动到嵌套在fabricSchema中(可能会有所帮助) 不过,似乎已经解决了这个问题的是,在分离之后,我连接了productSchema.path('fabrics') 我使用的正确导入数据的最终版本是:
/*const options = { discriminatorKey: 'kind', collection: 'products' }*/
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 },
itemImage: {
type: String,
},
availableSizes: {
type: Object,
required: true,
},
},
{ discriminatorKey: 'kind' }
)
const productSchema = 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,
},
price: {
type: Number,
required: true,
},
wholesalePrice: {
type: Number,
required: true,
},
onSale: {
type: Boolean,
required: true,
default: false,
},
salePrice: {
type: Number,
},
reviews: [reviewSchema],
rating: {
type: Number,
required: true,
default: 0,
},
numReviews: {
type: Number,
required: true,
default: 0,
},
fabrics: [fabricSchema],
})
const fabricSizes = productSchema.path('fabrics')
const Product = mongoose.model('Product', productSchema)
// sub schemas
const standardSchema = 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 plusSizeSchema = new mongoose.Schema({
availableSizes: {
oneX: { type: Number, required: true, default: 0 },
twoX: { type: Number, required: true, default: 0 },
},
})
const accessorySchema = new mongoose.Schema({
availableSizes: {
os: { type: Number, required: true, default: 0 },
},
})
// discriminators
const standardProduct = fabricSizes.discriminator(
'standardProduct',
standardSchema
)
const plusSizeProduct = fabricSizes.discriminator(
'plusSizeProduct',
plusSizeSchema
)
const accessoryProduct = fabricSizes.discriminator(
'accessoryProduct',
accessorySchema
)
export { Product, standardProduct, plusSizeProduct, accessoryProduct }
官方文件怎么说?关于如何实际实施它,它相当复杂。我使用discriminatorKey和'schema'.path(),将它们连接起来,然后按照给出的示例进行操作……但我遇到了一系列错误,如上文所述。我已经对它进行了更多的研究,并且有了一个新的数据模型来导入数据,但是它忽略了fabrics数组中每个对象的“availableSizes”。