如何使用nodejs获取sequelize关联中的单个对象

时间:2018-01-23 15:00:38

标签: node.js sequelize.js

在代码下面,我将两个表[用户和地址]关联起来。正确关联,我也得到输出但不是单个对象

return myDb.user.findAll({
                                attributes: ['ID','NAME'],

                                include: [{
                                  model: myDb.addresses,
                                  as: 'addresses',
                                  attributes:['ADDRESS_1','ADDRESS_2','CITY','STATE','POSTCODE'],

                                }]
                              })
                              .then((getCustomer) => {

                              .........
                              ........

上面的代码输出:

    {


        "ID" : "fgfhgdsfg4323",
        "NAME" : "MR.X",
        "addresses": [
            {
                "ADDRESS_1": "BBB",
                "ADDRESS_2": "GGG",
                "CITY": "TTT",
                "STATE": "NNN",
                "POSTCODE": ""
            }
        ]
    }

我的预期输出:

{
    "ID" : "fgfhgdsfg4323",
    "NAME" : "MR.X",
    "ADDRESS_1": "BBB",
    "ADDRESS_2": "GGG",
    "CITY": "TTT",
    "STATE": "NNN",
    "POSTCODE": ""
}   

如何获得我的预期输出?

3 个答案:

答案 0 :(得分:1)

您可以这样简单地完成操作:

 return myDb.user.findAll({
     attributes:['ID','NAME','addresses.ADDRESS_1','addresses.ADDRESS_2','addresses.CITY','addresses.STATE','addresses.POSTCODE'],
     include: [{
     model: myDb.addresses,
     as: 'addresses',
     attributes:[],    }],    raw:true, 
 });

您将必须获取与基本模型数据相关的数据,并且原始数据将定义为true。

答案 1 :(得分:0)

我在这里假设你有一对多的关系。因此对单个用户来说多addresses。 Ofcorse它会返回一个addresses

数组

如果你想要一个这样的单个对象,并且假设该用户只有一个地址,那么只需在事后处理数据。

答案 2 :(得分:0)

您正在建立关系,它会将您显示为数组,但如果您需要所需的输出,则可以尝试:



var data =     
    {
        "ID" : "fgfhgdsfg4323",
        "NAME" : "MR.X",
        "addresses": [
            {
                "ADDRESS_1": "BBB",
                "ADDRESS_2": "GGG",
                "CITY": "TTT",
                "STATE": "NNN",
                "POSTCODE": ""
            }
        ]
    }
var result = [];
for(var i = 0; i < data.addresses.length; i++){
  result.push({
    "ID" : data.ID,
    "NAME" : data.NAME,
    "ADDRESS_1": data.addresses[i].ADDRESS_1,
    "ADDRESS_2": data.addresses[i].ADDRESS_2,
    "CITY": data.addresses[i].CITY,
    "STATE": data.addresses[i].STATE,
    "POSTCODE": data.addresses[i].POSTCODE  
  })
  
 console.log(result);
}
&#13;
&#13;
&#13;