programing

* 대신 Sequelize(NodeJS)를 사용하여 특정 필드 지정

shortcode 2023. 1. 19. 07:23
반응형

* 대신 Sequelize(NodeJS)를 사용하여 특정 필드 지정

좋아요, 그럼 제가 Node에 프로젝트가 있습니다.JS에서는 MySQL ORM용 Sequelize를 사용하고 있습니다.이 기능은 훌륭하지만 쿼리 기반으로 반환되는 필드를 지정하는 방법이 있는지, 아니면 .query()를 실행하는 방법까지 있는지 알아보려고 합니다.

예를 들어 사용자 데이터베이스에는 엄청난 양의 기록과 열이 있을 수 있습니다.이 경우 3개의 열만 반환해야 하므로 해당 열만 가져오는 것이 더 빠릅니다.그러나 Sequelize는 테이블에서 모든 "*"에 대해 쿼리하여 가능한 한 완전한 객체 모델을 구현합니다.이것은 어플리케이션의 이 영역에서 생략하고 싶은 기능입니다.

findAll()에 전달할 오브젝트 속성으로 속성을 지정해야 합니다.

Project.findAll({attributes: ['name', 'age']}).on('success', function (projects) {
  console.log(projects);
});

발견 방법:

이 쿼리는 처음에 https://github.com/sdepold/sequelize/blob/master/lib/model-definition.js#L131 에서 호출됩니다.
다음으로 https://github.com/sdepold/sequelize/blob/master/lib/connectors/mysql/query-generator.js#L56-59 에서 작성됩니다.

새로운 버전으로 시험해 보십시오.

template.findAll({
    where: {
        user_id: req.params.user_id 
    },
    attributes: ['id', 'template_name'], 
}).then(function (list) {
    res.status(200).json(list);
})

속성 키의 배열을 사용합니다.별칭에 대해 중첩된 배열을 수행할 수 있습니다.

Project.findAll({
  attributes: ['id', ['name', 'project_name']],
  where: {id: req.params.id}
})
.then(function(projects) {
  res.json(projects);
})

산출량:

SELECT id, name AS project_name FROM projects WHERE id = ...;

모든 답변이 맞지만include그리고.exclude뿐만 아니라.

Model.findAll({
  attributes: { include: ['id'] }
});

Model.findAll({
  attributes: { exclude: ['createdAt'] }
});

원천

언급URL : https://stackoverflow.com/questions/8039932/specifying-specific-fields-with-sequelize-nodejs-instead-of

반응형