javascript - Sequelize关系查询返回重复数据

标签 javascript node.js sequelize.js

我正在使用 Sequelize 关系查询指定客户的客户订单。

index.js

var results2 = await customerService.getOrders(1);
console.log(results2);   

service.js

exports.getOrders = function (id) {
    return customerModel.findAll({
        raw: true,
        include: [{
            model: orderModel,
            where: { customer_idcustomer: id }
        }],

    }).then(r => r);
};

结果

[ { idcustomer: 1,
    customername: 'hello world',
    'orders.idorder': 1,
    'orders.orderdesc': 'order description 1',
    'orders.customer_idcustomer': 1 },
  { idcustomer: 1,
    customername: 'hello world',
    'orders.idorder': 2,
    'orders.orderdesc': 'Test 456',
    'orders.customer_idcustomer': 1 },
  { idcustomer: 1,
    customername: 'hello world',
    'orders.idorder': 3,
    'orders.orderdesc': 'Test 123',
    'orders.customer_idcustomer': 1 } ]

预期

[ { idcustomer: 1,
    customername: 'hello world',
    'orders: [{
       'orders.idorder': 1,
       'orders.orderdesc': 'order description 1',
       'orders.customer_idcustomer': 1 },   
    },
    {
       'orders.idorder': 2,
       'orders.orderdesc': 'order description 2',
       'orders.customer_idcustomer': 1 },   
    },
    {
       'orders.idorder': 3,
       'orders.orderdesc': 'order description 3',
       'orders.customer_idcustomer': 1 },   
    }]
]

最佳答案

您所需要做的就是从查询中删除 raw: true,

因为它将返回普通/平面对象,并且这会将您的对象转换为现在的样子。

exports.getOrders = function (id) {
    return customerModel.findAll({
        // raw: true, // <------ Just remove this line
        include: [{
            model: orderModel,
            where: { customer_idcustomer: id }
        }],

    }).then(r => r);
};

Note : You should put the where condition in upper level as per your logic

exports.getOrders = function (id) {
    return customerModel.findAll({
        where: { id: id } ,
        // raw: true, // <------ Just remove this line
        include: [{
            model: orderModel
        }]
    }).then(r => r);
};

关于javascript - Sequelize关系查询返回重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118940/

相关文章:

javascript - 不明白 anymodel.findOne.then().catch() 的工作原理

typescript - 通过追加到 SQLite 上的现有数组来更新 Sequelize 列

javascript - 切换标签的类别

javascript - 如何在变量中返回 while 循环的结果

javascript - f.call(null,x) 与 f(x) 速度

sequelize.js - Sequelize : association is referencing to wrong foreignKey column name

mysql - 使用 "Unknown Column"和 "limit"选项时,Sequelize 出现 "include"错误

javascript - 按字符串数组过滤javascript对象数组

javascript - Node JS : How to get the server's port?

javascript - 一个 promise 的 mysql 模块将如何与 NodeJS 一起工作?