Javascript 如何将mongoose中的鉴别器连接到父文档?尝试导入数据时出错

Javascript 如何将mongoose中的鉴别器连接到父文档?尝试导入数据时出错,javascript,node.js,reactjs,mongodb,mongoose,Javascript,Node.js,Reactjs,Mongodb,Mongoose,我正在制作一个电子商务应用程序,我正在尝试创建一个文档“products”,其中包含一个“reviews”和“fabrics”模式。每种产品都有一种以上的面料,每种面料都有自己的尺码,具体取决于产品类型(配件、加上尺码、标准等) 我正试图使用猫鼬鉴别器,使这些嵌套在产品模型的“织物”数组中 我在尝试导入数据时遇到一个又一个错误,我一直在更改设置以尝试使其无效。我已经阅读了鉴别器文档以及大约30篇关于猫鼬鉴别器的不同帖子 我在这个设置中遇到的错误是“TypeError:Product.path不是

我正在制作一个电子商务应用程序,我正在尝试创建一个文档“products”,其中包含一个“reviews”和“fabrics”模式。每种产品都有一种以上的面料,每种面料都有自己的尺码,具体取决于产品类型(配件、加上尺码、标准等)

我正试图使用猫鼬鉴别器,使这些嵌套在产品模型的“织物”数组中

我在尝试导入数据时遇到一个又一个错误,我一直在更改设置以尝试使其无效。我已经阅读了鉴别器文档以及大约30篇关于猫鼬鉴别器的不同帖子

我在这个设置中遇到的错误是“TypeError:Product.path不是函数”

这就像我尝试连接歧视者的第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 }

我解决了我自己的问题后,玩了一些(更多)。我没有同时调用模型和模式/鉴别器和模式,而是将它们分开(尽管这似乎与其他人在其他站点/帖子上的“修复”无关)。我也做了一些重组,只是为了我自己对数据的敏感性

我还将{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”。