node.js - TypeORM MongoDB 填充
问题描述
我目前正在使用 NestJS,并且正在使用带有 TypeORM 的 MongoDB,但我找不到与.populate()
Mongoose 中的方法类似的东西,有没有办法使用 TypeORM 或者我应该坚持使用 Mongoose?
例如,这是我用 Express + Mongoose 创建的路由,我想用 NestJS + TypeORM 重新创建它:
route.get('/:slug', async (req, res) => {
const collection = await Collection.findOne({slug: req.params.slug}).populate('products');
res.json(collection);
});
解决方案
在TypeORM
其中有一些东西relations
,您可以使用它来填充其他(相关)集合中的文档。
这是来自 TypeORM 文档的示例:
createConnection(/*...*/).then(async connection => {
/*...*/
let photoRepository = connection.getRepository(Photo);
let photos = await photoRepository.find({ relations: ["metadata"] });
}).catch(error => console.log(error));
您可以在TypeORM 文档上阅读更多相关信息。
根据您在 TypeORM 中设计集合/模式的方式,您的查询可能如下所示,我没有尝试过该查询,但您可以让它像这样工作:
Collection.find({slug: req.params.slug}, {relations : ['products']});
请注意,也有类似的功能.innerJoinAndSelect
,.leftJoinAndSelect
您可以使用这些功能并QueryBuilder(.createQueryBuilder)
从其他集合中填充文档,就像mongoose .populate()
我建议您阅读 TypeORM,其中也提供了许多示例,它将帮助您构建所需的查询类型。
推荐阅读
- dart - 为什么在比较类时关键字“is”没有按预期运行?
- java - 为什么在 Spring MVC 测试中处理 Resource 时会忽略 content().bytes() 的结果?
- c++ - 为什么 Z3 BitVec 对象没有运行时大小信息?
- linux - 是否有另一种方法来识别与 rpm 规范文件中的 rpm 命令一起使用的参数或参数
- android - 如何识别设备是否支持显示屏生物识别指纹?
- javascript - 画布似乎可以工作,但当我在上面画画时不显示
- sql-server - 在 sql server 2012 中加入 3 个表给了我重复的记录
- excel - 不允许使用 Intersect 方法的空单元格
- arduino - 是否有工具或方法可以在不直接使用 arduino IDE 的情况下上传 arduino 草图?
- python - 如何通过 boto3 获取 AWS 的配额?