无法查询关系 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 将起作用
我有一个 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 将起作用