Mongoose 不保存具有可区分属性的对象

问题描述 投票:0回答:1

我创建了一个由 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'
 */
    

没有报告错误,测试分类产品已保存到数据库中。我什么地方做得不对?任何帮助将不胜感激

mongodb mongoose mongoose-schema
1个回答
0
投票

我使用 ProductSchema 而不是创建 ProductModel,然后使用它从模型创建 CategorizedProduct。

© www.soinside.com 2019 - 2024. All rights reserved.