首页 > 解决方案 > 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);
});

标签: node.jsmongodbnestjstypeorm

解决方案


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,其中也提供了许多示例,它将帮助您构建所需的查询类型。


推荐阅读