简体   繁体   中英

Sequelize get own attributes only, ignore included instances

What I'm looking for is an instance method in Model that will return only the attributes of that model & exclude instances of any included model.

eg: Imagine I have 2 models, with a hasMany ( or any ) association:

Post {
  id,
  content,
  user_id
}

User: {
  id,
  name,
}

and I have:

const userWithPosts = await User.findOne({
  where: { id: 33 },
  include: [{
    model: Post,
    as: 'posts'
  }]
});
console.log(userWithPosts)
/*
  {
    id: 33,
    name: 'John Doe',
    posts: [
      Post {
        id: 1,
        content: '..',
        user_id: 33
      },
      Post {
        id: 2,
        content: '...',
        user_id: 33
      }
    ]
  }
*/

I'm looking for a method, say getOwnAttributes or something like that which does:

userWithPosts.getOwnAttributes()
/*
{
  id: 33,
  name: 'John Doe',
}
*/

I've looked into couple of things:

userWithPosts.get({ raw: true })
userWithPosts.get({ plain: true })
userWithPosts.toJSON()

All of the above returns included instances as well.
Any existing method or workaround that can do this?

EDIT: I'm not talking about doing it at query time, but getting the value from already queried instance. Currently my work-around for this is:

const payload = _.pick(userWithPosts.toJSON(), [
  ...Object.keys(User.rawAttributes),
]);

You can refer to the code below to exclude attributes of Post table.

const userWithPosts = await User.findOne({
  where: { id: 33 },
  include: [{
    model: Post,
    as: 'posts',
    attributes: []
  }]
});

I hope it helps!

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