0

我有两个模型,称为 TodaysDeals 和 Products

export class TodaysDeal {

    _id: ObjectId;

    @Property({ required: true, type: Schema.Types.ObjectId, ref: "ProductsModel" })
    products: Products
}
export const TodaysDealModel = getModelForClass(TodaysDeal);

export class Products {

    _id: ObjectId;

    @Property({ required: true })
    productName: String;
}

export const ProductsModel = getModelForClass(Products);

我正在尝试填充连接的数据,但我没有得到连接的结果。它只包含 product._id。

这是我的代码

 let data = await TodaysDealModel.find().populate("ProductsModel");
4

2 回答 2

1

扩展@Vishnu 所说的:你有 2.5 个问题

  1. 因为populate您需要使用字段名称而不是引用的模型名称
  2. 模型名称不是ProductsModel,至少不是来自您提供的代码示例,请查看此处以查看 typegoose 如何生成类/模型名称 和此处

另一个“较小”的问题是,您将Products其用作类型,哪里Ref<Products>是正确的

您更正的代码如下所示:

export class TodaysDeal {
  _id: ObjectId;

  @Property({ required: true, type: Schema.Types.ObjectId, ref: "Products" })
  products: Ref<Products>;
}
export const TodaysDealModel = getModelForClass(TodaysDeal);

export class Products {
  _id: ObjectId;

  @Property({ required: true })
  productName: String;
}

export const ProductsModel = getModelForClass(Products);
let data = await TodaysDealModel.find().populate("products").exec();
于 2020-10-05T12:20:34.167 回答
0

您应该为方法提供模型populate中提供的字段名称。TodaysDealModel

尝试

 let data = await TodaysDealModel.find().populate("products");
于 2020-10-03T14:41:10.813 回答