sequelize-如何返回普通对象

时间:2018-09-25 13:13:22

标签: orm sequelize.js

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

我以前使用过string bananacolor = "yellow"; if (StringComparer(bananacolor, new string[] { "yellow", "brown", "blue" })) { bool bananaIsRipe = true; } } private static bool StringComparer(string source, string[] values) { foreach (var value in values) { if (source == value) return true; } return false; } ,但是在这种情况下不起作用。我需要维护原始树。我有4个嵌套关联的复杂结果。开发人员提供了一个名为sequelize-to-json的程序包,但是将其应用于最新版本的sequelize之后,我的对象中仍然有数组。我认为该插件可能不再受支持,因为上一次提交是在一年多以前。

这是我的模特:

raw: true

输出是这样的:

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']],
            },
        },
    },
})

首选输出将是这样的:(简化为验证json)     {     “ namespace”:“ orangeApp”,     “ description”:“移动应用程序电子邮件通知”,     “域”:{

[
{
    "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的示例,但是由于我有关联并且想要维护树,所以我没有看到一个很好的示例。感谢所有帮助

1 个答案:

答案 0 :(得分:0)

如果您知道查询将仅返回其中包含一个对象的数组,则可以使用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]

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

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