从最终结果中排除合并的 table 数据

excluding joined table data from final results

假设我有以下代码:

const { Entrada, Entidade } = require('./models');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;

let nome = 'dd';

async function main() {

    Entrada.findOne({

        where: {
            ativa: true
        },

        include: [{
            model: Entidade,
            where: {
                nome: {
                    [Op.like]: `%${nome.trim()}%`
                },
                ativa: true
            }
        }]

    }).then(entrada => {

        console.error(
            JSON.stringify(
                entrada, null, 2));

    });
}

main();

运行良好并且会 return 我:

{
  "id": 1,
  "numeroDaNota": "101011011",
  "dataDaNota": "2020-10-01",
  "dataDeEntrada": "2020-10-02",
  "valor": 150,
  "ativa": true,
  "lojaId": 1,
  "entidadeId": 1,
  "entidade": {
    "id": 1,
    "nome": "dddd",
    "fantasia": null,
    "documento": "dddd",
    "isentoDeInscricaoEstadual": 1,
    "inscricaoEstadualOuRg": null,
    "tipoDePessoa": "FISICA",
    "situacaoTributaria": "SIMPLES_NACIONAL",
    "email": "dddd",
    "emailNFE": null,
    "ativa": true,
    "foneFixo": null,
    "celular": "8888",
    "logradouro": "ooo",
    "cep": "111",
    "numero": 111,
    "complemento": null,
    "bairro": "111",
    "cliente": true,
    "fornecedor": true,
    "transportadora": false,
    "limiteDeCredito": null,
    "descontoEmVenda": null,
    "observacao": null,
    "suframa": null,
    "cidadeId": 23,
    "empresaId": 1,
    "paisId": 206,
    "atividadeFimId": null,
    "regiaoId": null,
    "figuraFiscalId": null
  }
}

但是,我对输出中模型“Entrada”中的 属性“entidade”不感兴趣。我之所以加入它(通过 'include: []')是因为我需要通过 属性 的“Entidade”(属性 是“nome”)过滤“Entrada”。我知道我可以在定义模型时使用 toJSON() {} 以免“jsonning”我不想使用的属性,例如密码.

然而,是否有一种巧妙的方法可以通过在查询时简单地使用 sequelize 参数来从最终输出中排除连接模型?我看了一下:

MyModel.findAll({
  attributes: {exclude: ['some_field']}
});

并试图从最终的 JSON 中排除“entidade”,但它似乎不会从最终结果中排除加入的 models/tables。我发现这缺乏续集。从 17 年的 Hibernate 经验来看,这似乎令人沮丧。

一定有办法做到这一点,我一定是错过了。

如果可以,请帮助我。谢谢

尝试在包含模型的attributes选项中指示一个空数组:

include: [{
            model: Entidade,
            attributes: [],
            where: {
                nome: {
                    [Op.like]: `%${nome.trim()}%`
                },
                ativa: true
            }
        }]

尝试通过

attributes:[]

在您的代码中,例如

include: [{
            attributes: [],
            model: Entidade,
            where: {
                nome: {
                    [Op.like]: `%${nome.trim()}%`
                },
                ativa: true
            }
        }]