如何从查询结果中隐藏包含的嵌套模型

How to hide included nested model from query results

提问人:Jozef 提问时间:8/31/2023 最后编辑:Mark RotteveelJozef 更新时间:9/5/2023 访问量:23

问:

我想在我的 Sequelize 查询的 findOptions 接口中包含嵌套模型,以便我可以设置条件,但我不希望它们显示为结果。我知道已经有人问过这个问题,但建议的解决方案都不适合我。我的示例情况是,我有 3 个表,其中经理可以有 n 个员工,一个员工有 n 个文档


经理 -> 员工 (1:n) 员工 -> 文档 (1:n)

我想运行一个查询,该查询仅显示作为输入提供的特定经理相关的文档的 ID。这是我使用的 findOptions 配置,其中在文档表上运行 FindAll 命令

findOptions = {
    include: {
        model: Employee,
        required: true,
        as: 'employee',
        attributes: { include: [] },
        include: {
            model: Manager,
            as: 'manager',
            attributes: { include: [] }, 
            where: {
                managerId: { [Op.in]: authorized.managerIds }
            }
        }
    }
}; 

但是,由于某种原因,虽然结果返回的文档是正确的,但响应还包含嵌套在其中的整个 Manager 和 Employee 对象,如下所示。

[{
        "documentId": 3,
        "employee": {
            "employeeId": 2,
            "manager": {
                "managerId": 3
            }
        }
}]

我做错了什么,如何摆脱嵌套在里面的整个员工对象,所以结果只看起来像这样?

[{ "documentId": 3 }]
续集 .js 急切加载

评论

1赞 Anatoly 9/1/2023
你试过了吗?attributes: [],
0赞 Jozef 9/4/2023
@Anatoly:谢谢,成功了!并不是说你需要更多的代表,但如果你愿意,把它写成一个答案,这样我就可以接受它。

答:

1赞 Anatoly 9/5/2023 #1

要排除嵌套模型属性,只需在选项中指示:attributes: [],include

include: {
            model: Manager,
            as: 'manager',
            attributes: [], 
            where: {
                managerId: { [Op.in]: authorized.managerIds }
            }
        }