mongodb - 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;
}
}
解决方案
这个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;
}
推荐阅读
- java - Swift 和 Android - 我可以从某些目标部署中排除二进制文件吗?
- python - pandas df 到 python 嵌套字典
- javascript - 文档 querySelector 实现的问题
- java - AnyLogic 代理变量初始化
- sql - 事务等待提交,否则阻塞资源
- kubernetes - Velero 备份在 k8 集群上安装失败
- javascript - 防止 CodeMirror AutoResize (react-codemirror2)
- sapui5 - 如何获取点击项的绑定上下文?
- janusgraph - 在实例之间迁移 Janusgraph 中的图
- javascript - 如何将对象绘制到画布上?