NestJS:Mongodb驱动不支持此操作

Posted

技术标签:

【中文标题】NestJS:Mongodb驱动不支持此操作【英文标题】:NestJS: This operation is not supported by Mongodb driver 【发布时间】: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 【参考方案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;

【讨论】:

您的问题解决了吗?这似乎不是一个正确的答案。如果你已经解决了,请描述你做了什么来解决它。

以上是关于NestJS:Mongodb驱动不支持此操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符

如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符

此客户端所连接的 MongoDB 集群不支持会话-springboot-mongodb-transactions

Mongodb 官网驱动2.2.4.26版本 增,删 改,查,mongodb2.2.4.26

如果不单独使用,nestjs/swagger 是不是支持查询参数的文档?

尝试安装类验证器和类转换器时,NestJS“警告 EBADENGINE 不支持的引擎 @angulardevkit”