无法使用关系nestjs/mongoose上的条件进行查询

dluptydi  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(354)

我有一个项目模型和一个类别模型。
项目模型具有对类别模型的引用(objectid)。
我正在编写代码来获取特定类别中的项目。
因此,我将类别的id作为参数(字符串类型)提供给服务,
然后写“returnthis.itemmodel.find({category:id}).exec();”。
其中,“类别”是对类别模型的引用,
“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);

类别.服务.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
  }
}
daupos2t

daupos2t1#

你在这里提到
项目模型具有对类别模型的引用(objectid)。
但是 category 财产 Item 模型被键入为 Category .
执行此操作时: this.ItemModel.find({category: id}).exec(); 您提供的是一种 ObjectId 其中一种 Category 这是意料之中的事。
由于未在项目上保存整个类别对象,请将项目类中的定义更改为:

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

注意:如果你通过 id 作为一根绳子 this.ItemModel.find({category: id}).exec(); ,然后将category作为字符串而不是objectid键入即可

相关问题