首页 > 解决方案 > NestJS:Mongodb驱动不支持此操作

问题描述

我正在尝试从数据库中获取所有元素,但遇到以下错误:

This operation is not supported by Mongodb driver.

我正在使用 MongoDB 和 Mongoose 与数据库进行交互。

这是我发生错误的代码:

import { GetTasksFilterDto } from './dto/get-tasks-filter.dto';
import { TaskStatus } from './task-status.enum';
import { CreateTaskDto } from './dto/create-task.dto';
import { TaskEntity } from './task.entity';
import { Repository, EntityRepository } from 'typeorm';

@EntityRepository(TaskEntity)
export class TaskRepository extends Repository<TaskEntity> {
  async getTasks(filterDto: GetTasksFilterDto): Promise<TaskEntity[]> {
    const { status, search } = filterDto;
    const query = this.createQueryBuilder('task');

    // The error happen in this line
    const tasks = await query.getMany();
    return tasks;
  }
}

标签: mongodbtypescriptnestjstypeorm

解决方案


这个TypeORM MongoDB 文档会为我完成这项工作吗?

问题是,我这样做的方式是错误的,mongodb不支持这种查询方式,相反我必须使用正确的方式来做到这一点,即使用MongoRepository允许我们为任何实体创建管理器。

下面的代码显示了我是如何解决这个问题的:

async getTasks(filterDto: GetTasksFilterDto): Promise<TaskEntity[]> {
  const { status, search } = filterDto;

  const manager = getMongoRepository(TaskEntity);

  const tasks = await manager.find({
    status: status,
    where: {
      $or: [
        { text: Like(`%${search.toString()}%`) },
        { title: Like(`%${search.toString()}%`) },
      ],
    },
  });

  return tasks;
}

推荐阅读