我创建了一个由 CategorizedProductSchema 扩展的 ProductSchema。它们之间的区别在于 CategorizedProductSchema 有一个属于 CategorySchema 类型的属性类别。但是,当我创建并保存分类产品时,它不会保存类别信息,它只保存 ProductSchema 中的字段。
这是模式的完整定义
import mongoose from 'mongoose'
const options = { _id:false, discriminatorKey: 'kind' };
export interface Product {
id: String,
productId: String,
productName: String,
productType: String
}
export interface CategorizedProduct extends Product{
categoryFacts: {
description: String,
categoryClass: String
}
}
export interface CategoryProduct {
category: CategorizedProduct
}
const CategorySchema = new mongoose.Schema({
categoryFacts: {
description: String,
categoryClass: String
}
}, options
)
export const ProductSchema = new mongoose.Schema(
{
_id: String,
productCode: String,
productName: String,
productType: String
},
options
)
export const CategorizedProductSchema =
ProductSchema.discriminator('CategorizedProduct',CategorySchema)
export interface ProductDocument extends Product, Document {
}
export interface CategorizedProductModel extends CategorizedProduct, Document {
}
export const ProductModel = mongoose.model<ProductDocument>('products', ProductSchema)
export const CategorizedProductModel = mongoose.model<CategorizedProductModel>.
('products', CategorizedProductSchema)
ProductSchema.index({ productId: 1, productName: 1, productType: 1 }, { unique: true })
ProductSchema.index({ clientHoldId: 1 }, { unique: true })
CategorizedProductSchema.index({ productId: 1, productName: 1, productType: 1 }, { unique: true })
async function saveCategorizedProduct(product:CategorizedProduct){
const result = await CategorizedProductModel.create(product)
}
//results in collection products missing the category field
/**
*
* _id: "prod-2223",
* productCode: 'ABC'
* productName: 'Watch',
* productType: 'AD-TYPE'
*/
没有报告错误,测试分类产品已保存到数据库中。我什么地方做得不对?任何帮助将不胜感激
我使用 ProductSchema 而不是创建 ProductModel,然后使用它从模型创建 CategorizedProduct。