2017-10-13 196 views
1

我试图用TypeORM和MongoDB来表达,但我遇到了基本问题。TypeORM FindById不适用于MongoDB

我刚刚为一个实体创建了一个基本的CRUD操作的控制器。方法save,findAll和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 例如,这是一个实体返回上得到所有“投资/”

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

如果我尝试发送此特定对象调用的请求

投资/ 59dfd8cadcbd9d1720457008

的反应总是404

同样的行为的发生是由于删除方法,抛出一个异常

找不到实体由给定的ID删除

我也试图转换使用字符串对象ID:

new ObjectID(req.params.id); 

但它失败,错误对象ID是不是构造。

回答

2

如果你收到错误ObjectId不是一个构造函数,那是因为你忘记了在你的文件中需要它。所有你需要的是:

const ObjectId = require('mongodb').ObjectId; 
+0

谢谢,我可以让它工作导入mongodb。 '*进口从 “MongoDB的” MongoDB的;' '新mongodb.ObjectId(req.params.id);' 我不'吨知道为什么的ObjectID从typeorm包不工作。 –

+0

因为它只是为类型声明“抽象类”,而不是为了运行时的目的。 在新版本中,您将能够通过id查找十六进制字符串。 –