从最终结果中排除合并的 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
}
}]
假设我有以下代码:
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
}
}]