TypeORM FindById不适用于MongoDB

14ifxucb  于 2023-04-20  发布在  Go
关注(0)|答案(2)|浏览(150)

我尝试在MongoDB和express中使用TypeORM,但我遇到了一些基本问题。
我刚刚为实体创建了一个控制器,具有基本的CRUD操作。方法保存,findAll和find by Filter工作正常,但我无法使需要mongo id的方法工作。

router.get("/", async(req: Request, res: Response) => {
    const investmentRepository = getMongoRepository(Investment);

    const investments = await investmentRepository.find();
    res.send(investments);
});

router.get("/:id", async(req: Request, res: Response) => {
    const investmentRepository = getMongoRepository(Investment);
    const investment = await 
    investmentRepository.findOneById(req.params.id);
    if (!investment) {
        res.status(404);
        res.end();
    }
    res.send(investment);
});

第二个方法总是返回404。例如,这是在获取所有“investment/”时返回的实体

{
    "id": "59dfd8cadcbd9d1720457008",
    "name": "Teste LCI",
    "startDate": 1466305200,
    "numberOfDays": 365,
    "type": "LCI_LCA"
}

如果我尝试发送一个请求,请求这个特定的对象调用
投资/59 dfd 8 cadcbd 9d 1720457008
响应总是404。
delete方法也会发生同样的行为,引发异常
找不到要按给定ID删除的实体
我还尝试使用以下命令将字符串转换为ObjectID:

new ObjectID(req.params.id);

但它失败并返回错误ObjectID不是构造函数。

gojuced7

gojuced71#

如果你收到错误ObjectId is not a constructor,那是因为你忘记在你的文件中需要它。你所需要的就是:

const ObjectId = require('mongodb').ObjectId;
4smxwvx5

4smxwvx52#

如果你是从typeorm导入可能发生的情况,你需要用途:

import { ObjectId } from 'mongodb'

下面是一个例子:

import { Injectable, NotFoundException } from '@nestjs/common';
import { TaskStatus } from './task-status.enum';
import { CreateTaskDto} from './dto/create-task.dto';
import { GetTasksFilterDto } from './dto/get-tasks-filter.dto';
import { TaskRepository } from './dto/task.respository';
import { InjectRepository } from '@nestjs/typeorm';
import { Task } from './entities/task.entity';
import { ObjectId} from 'mongodb';

@Injectable()
export class TasksService {
  constructor(
    @InjectRepository(Task)
    private tasksRepository: TaskRepository
  )
  {}

  async getTaskById(id: ObjectId): Promise<Task> {
    console.log(`Finding task with id '${id}'`);
    const found = await this.tasksRepository.findOne({
      where: { _id: new ObjectId(id) }
    });

    console.log(found);
    if (!found) {
      throw new NotFoundException(`The task with '${id}' does not exist`);
    }
    return found;
  }

相关问题