【问题标题】:NestJS: This operation is not supported by Mongodb driverNestJS:Mongodb驱动不支持此操作
【发布时间】:2020-11-07 21:21:17
【问题描述】:

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

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;
  }
}

【问题讨论】:

  • 操作是什么?
  • 我认为 getMany() 对吗?
  • 您似乎在使用TypeORM,但您包含标签mongoose。如果猫鼬不相关,请将标签设置为typeorm

标签: mongodb typescript nestjs typeorm


【解决方案1】:

TypeORM MongoDB Documentation 会为我完成这项工作吗?

问题是,我这样做的方式是错误的,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;
}

【讨论】:

  • 您的问题解决了吗?这似乎不是一个正确的答案。如果你已经解决了,请描述你做了什么来解决它。
猜你喜欢
  • 1970-01-01
  • 2023-01-14
  • 2019-05-18
  • 1970-01-01
  • 2011-05-04
  • 2011-09-11
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多