【问题标题】:TypeORM MongoDB populateTypeORM MongoDB 填充
【发布时间】:2021-01-25 10:50:56
【问题描述】:

我目前正在使用 NestJS,并且正在使用带有 TypeORM 的 MongoDB,但我在 Mongoose 中找不到类似于 .populate() 方法的东西,有没有办法使用 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.js mongodb nestjs typeorm


    【解决方案1】:

    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 docs 上阅读更多相关信息。

    根据您在 TypeORM 中设计集合/模式的方式,您的查询可能如下所示,我没有尝试过该查询,但您可以让它像这样工作:

    Collection.find({slug: req.params.slug}, {relations : ['products']});
    

    注意,还有像 .innerJoinAndSelect.leftJoinAndSelect 这样的函数,您可以将它们与 QueryBuilder(.createQueryBuilder) 一起使用,并像 mongoose .populate() 一样从其他集合中填充文档

    我建议您阅读 TypeORM,其中也提供了许多示例,它将帮助您构建所需的查询类型。

    【讨论】:

    • 添加relations参数好像不行。同样显然 QueryBuilder 方法不适用于 MongoDB。我决定切换回猫鼬,因为 NestJS 也对它有很大的支持。
    • 对于relations 参数,您还需要更新您的 typeORM 模式,并在那里定义关系(如一对一或多对一),那么只有它才会起作用
    猜你喜欢
    • 2021-10-15
    • 2018-03-28
    • 2019-06-25
    • 2017-06-10
    • 2021-10-22
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多