无法查询关系 nestjs/mongoose 的条件

Can't query with condition on relation nestjs/mongoose

我有一个 Item 模型和一个 Category型号。
item 模型有一个 reference (ObjectId) 到 类别型号。
我正在编写代码以 获取特定类别中的项目
所以我将类别的 ID 作为参数(字符串类型)提供给服务,
然后写“return this.ItemModel.find({category: id}).exec();”.
其中 'category' 是对类别模型的引用,
'id' 是传递给 API 调用的 ID。
我收到错误消息“没有过载匹配此调用”。

我该如何解决这个问题?

项目架构

export type ItemDocument = Item & Document;
@Schema({ timestamps: true })
export class Item {
  @Prop()
  name_en: string;
  @Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'Category' })
  category: Category;
}
export const ItemSchema = SchemaFactory.createForClass(Item);

类别架构

export type CategoryDocument = Category & mongoose.Document;
@Schema({ timestamps: true })
export class Category {
  @Prop()
  name_en: string;
}
export const CategorySchema = SchemaFactory.createForClass(Category);

category.service.ts

@Injectable()
export class CategoryService {
  constructor(
    @InjectModel(Category.name)
    private categoryModel: mongoose.Model<CategoryDocument>,
    @InjectModel(Item.name)
    private readonly ItemModel: mongoose.Model<ItemDocument>,
  ) {}
  findOneCatItems(id: string) {
    return this.ItemModel.find({category: id}).exec(); --> Error Line
  }
}

你在这里提到

The item model has a reference (ObjectId) to the Category model.

但是 Item 模型的 category 属性 被键入为 Category

当你这样做时: this.ItemModel.find({category: id}).exec();

您正在提供 ObjectId 类型,而需要 Category 类型。

由于您没有将整个类别对象保存在项目上,因此请将项目 class 中的定义更改为:

@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'Category' })
  category: mongoose.Schema.Types.ObjectId;

注意:如果您在此处将 id 作为字符串传递 this.ItemModel.find({category: id}).exec();,则输入类别作为字符串而不是 ObjectId 将起作用