[英]How do I write data to Cosmos DB using Discriminators, Mongo DB API, and Mongoose?
[英]How do I connect my discriminators in mongoose to my parent document? Getting errors when trying to import data
我正在制作一个电子商务应用程序,我正在尝试创建 1 个文档“产品”,其中包含“评论”和“面料”的架构。 每个产品都有不止一种面料,每种面料都有自己的一套尺寸,具体取决于产品的类型(配件、加码、标准等)。
我正在尝试使用 mongoose 鉴别器使这些嵌套在产品 model 的“织物”数组中。
尝试导入数据时出现错误,我一直在更改设置以尝试使其工作无济于事。 我已经阅读了鉴别器文档以及关于 mongoose 鉴别器的大约 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 }
在玩了更多(更多)之后,我解决了自己的问题。 我没有将 model 和模式/鉴别器和模式一起调用,而是将它们分开(尽管这与其他人在其他网站/帖子上的“修复”似乎无关紧要)。 我也做了一些重组,只是为了我自己对数据的敏感性。
我还将 { 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 }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.