@Lxxxwq

Как вложить схему в другую схему nestJs?

Всем здравствуйте!
У меня есть схема, и я пытаюсь в эту схему заснуть ещё 1, на офф. сайте неста я не нашёл примеров такого, но нашел тут: ссылка, тут пример с new Schema({...}).
Мой код: pastebin,
import {Prop, raw, Schema, SchemaFactory} from '@nestjs/mongoose';
import { Document } from 'mongoose';
import * as Mongoose from "mongoose";
import {orderLifetime, OrderStatusType} from "./order.constants";
import {Product} from "../product/product.schema";

export type OrderDocument = Order & Document;

@Schema()
class Products {
    @Prop({type: Mongoose.Schema.Types.ObjectId, ref: 'Product'})
    productId: Product

    @Prop()
    productName: String

    @Prop()
    sumKeys: Number

    @Prop([String])
    keys: string[]
}

@Schema()
class Info {
    @Prop({default: new Date()})
    createdAt: Date

    @Prop({default: new Date().setTime(new Date().getTime() + orderLifetime) })
    cancelAt: Date

    @Prop()
    userIp: String
}


@Schema()
export class Order {
    @Prop({type: [Products]})
    products: [Products];

    @Prop()
    price: number

    @Prop()
    status: OrderStatusType;

    @Prop({type: [Info]})
    info: [Info];
}


export const OrderSchema = SchemaFactory.createForClass(Order);


Ошибка:
TypeError: Invalid schema configuration: `Products` is not a valid type within the array `products`.See https://bit.ly/mongoose-schematypes for a list of valid schema types.


Как такое исправить?
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
Grapeoff
@Grapeoff
В чём концепция...?
Во-первых, переименуйте Products на Product, вы делаете модель продукта, а не продуктов.
Во-вторых, products должен содержать в себе ObjectID's чтобы вы потом могли сделать populate, не надо вам вложенных объектов.
В-третьих, попробуйте Typegoose в паре с @nestjs-typegoose, вот там такая типизация прокатит.

UPD: nestjs-typegoose устарел и больше не поддерживается. Более того, там есть один критический недостаток. Я сделал свою обёртку для Typegoose в рамках NestJS.

NPM: https://www.npmjs.com/package/kindagoose
GitHub: https://github.com/GrapeoffJS/kindagoose
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы