无法在关系 nestjs/mongoose 上查询条件

Posted

技术标签:

【中文标题】无法在关系 nestjs/mongoose 上查询条件【英文标题】:Can't query with condition on relation nestjs/mongoose 【发布时间】:2021-09-19 21:29:18 【问题描述】:

我有一个 Item 模型和一个 Category 模型。 item 模型对 Category 模型有一个reference (ObjectId)。 我正在编写代码来获取特定类别中的项目。 所以我将类别的 id 作为服务的参数(字符串类型), 然后写“return this.ItemModel.find(category: id).exec();”。 其中“类别”是对类别模型的引用, 'id' 是传递给 API 调用的 id。 我收到错误“No Overload Matches This Call”。

我该如何解决这个问题?

项目架构

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
  

【问题讨论】:

你能分享你得到的完整错误吗? Mongoose supports passing filter objects 【参考方案1】:

你在这里提到

项目模型具有对类别模型的引用 (ObjectId)。

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

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

您提供的类型为 ObjectId,而预期类型为 Category

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

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

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

【讨论】:

非常感谢!这似乎有效!但在文档中,该示例使用类(在示例中,它是 Owner),而不是 mongoose.Schema.Types.ObjectId。这两者有什么区别?

以上是关于无法在关系 nestjs/mongoose 上查询条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DTO 中定义 ObjectId 以及在 NestJS Mongoose 中获取关系数据的正确查询是啥?

Nestjs中的MissingSchemaError

NestJs / Mongoose 在 Docker 撰写时无法建立 MongoDB 数据库连接

无法使用 nestjs/mongoose 连接 mongoDB

NestJS + Mongoose:如何测试 document(data).save()?

在 @nestjs/mongoose 中设置 mongoose 全局选项