gpt4 book ai didi

orm - sequelize - 如何返回普通对象

转载 作者:行者123 更新时间:2023-12-03 22:39:23 25 4
gpt4 key购买 nike

我知道这听起来像是一个简单的请求,但我在这方面花了太多时间。默认情况下,我希望 sequelize 的输出是一个普通对象,没有任何数组。

我以前使用过 raw: true ,但这不适用于这种情况。我需要维护原始树。我有 4 个嵌套关联的复杂结果。开发人员提供了一个名为 sequelize-to-json 的包,但在将其应用于最新版本的 sequelize 后,我的对象中仍然有数组。我相信该插件可能不再受支持,因为最后一次提交是一年多前。

这是我的模型:

Namespace.findAll({
attributes: ['namespace', 'description'],
include: {
model: Domain,
as: 'domains',
attributes: ['domain', 'description'],
required: false,
include: {
model: Attribute,
as: 'attributes',
attributes: ['attribute', 'description'],
required: false,
include: {
model: Value,
as: 'values',
attributes: ['type', 'value'],
required: false,
where: {
[Op.or]: [{ uuid }, { uuid: '00000000-0000-0000-0000-000000000000' }],
},
// order: [['id', 'ASC']],
},
},
},
})

输出是这样的:
[
{
"namespace": "orangeApp",
"description": "Mobile App Email Notifications",
"domains": [
{
"domain": "notifications",
"description": "Notifications",
"attributes": [
{
"attribute": "scheduled_medication",
"description": "Scheduled Medication",
"values": [
{
"type": "delivery_method",
"value": "push"
},
{
"type": "preview_type",
"value": "basic"
}
]
},
{
"attribute": "new_messages",
"description": "New Messages",
"values": [
{
"type": "blahhhhhh",
"value": "true"
}
]
},
{
"attribute": "friend_requests",
"description": "Friend Requests",
"values": [
{
"type": "dc",
"value": "true"
}
]
}
]
}
]
}
]

首选输出将是这样的:(简化为验证 json)
{
"namespace": "orangeApp",
"description": "移动应用电子邮件通知",
“域”:{
    "domain": "notifications",
"description": "Notifications",
"attributes": {
"attribute": "scheduled_medication",
"description": "Scheduled Medication",
"values": {
"type": "delivery_method",
"value": "push"
}
}
}

有什么建议么?我见过很多人获得纯 JSON 的例子,但根据我的联想,并想要维护树,我没有看到一个好的例子。感谢所有帮助

最佳答案

如果您知道您的查询将只返回一个包含一个对象的数组,您可以使用 findOne 方法而不是 findAll。如果你想使用你拥有的东西,你可以执行以下操作:

let result = Namespace.findAll({
attributes: ['namespace', 'description'],
include: {
model: Domain,
as: 'domains',
attributes: ['domain', 'description'],
required: false,
include: {
model: Attribute,
as: 'attributes',
attributes: ['attribute', 'description'],
required: false,
include: {
model: Value,
as: 'values',
attributes: ['type', 'value'],
required: false,
where: {
[Op.or]: [{ uuid }, { uuid: '00000000-0000-0000-0000-000000000000' }],
},
// order: [['id', 'ASC']],
},
},
},
})
let cleanResult = result[0].domains[0]

仅当您只返回一个结果并且您只对该域属性中的第一个域对象感兴趣时才执行此操作(看起来好像是这样)。

为了加强您收到的评论,数组确实是有效的 JSON。

关于orm - sequelize - 如何返回普通对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52499081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com