简体   繁体   中英

Nodejs Sequelize query

Goodday, I have a little difficulties on my assignment, The User has many locations that display on another table (UserAddress) and the the UserId column on User table that connect to my UserAddress Table, The problem I've encountered here is that there are multiple rows that are displayed depending on user's location, I would have liked 1 user row and the location was arrayed

current result:

{
  id: 1,
  first_name: 'Denise',
  last_name: 'Morata',
  middle_name: '',
  address: 'address1'
},
{
  id: 1,
  first_name: 'Denise',
  last_name: 'Morata',
  middle_name: '',
  address: 'address2'
}
{
  id: 1,
  first_name: 'Denise',
  last_name: 'Morata',
  middle_name: '',
  address: 'address3'
}

Desired result

{
  id: 1,
  first_name: 'Denise',
  last_name: 'Morata',
  middle_name: '',
  address: [
    'address1',
    'address2',
    'address3'
  ]
}

my code

let User = await Database.getConnection().models.User;
let UserAddress = await Database.getConnection().models.UserAddress;

User.hasMany(UserAddress, { foreignKey: "UserId" });

let result = await User.findAll({
    attributes: [
      "_id",
      "username",
      "first_name",
      "middle_name",
      "last_name",
      "suffix_name",
      "UserAddress.address",
    ],
    include: [
        { model: UserAddress, attributes:["address"] }
    ],
  raw: true,
});

If you want to get records grouped by included models in the query then you shouldn't indicate raw: true because this mode means to return the plain array with all fields from associated models.
If you don't want to get Sequelize models and simply JS-objects then just get them using get({ plain: true }) :

const result = await User.findAll({
    attributes: [
      "_id",
      "username",
      "first_name",
      "middle_name",
      "last_name",
      "suffix_name",
      "UserAddress.address",
    ],
    include: [
        { model: UserAddress, attributes:["address"] }
    ],
});
const plainObjects = result.map(x => x.get({ plain: true }));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM