![](/img/trans.png)
[英]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.