クエリー時の関係テーブルのフィールドの除外


上記のように、usersテーブルとpostsテーブル、およびそれらの関係テーブルlikeを例に挙げます.
  • 表ユーザのモデルがUSER表投稿のモデルがPOSTである場合,両者の関係は1대다である.
  • およびその両方の関係テーブルには、ユーザーと投稿との関係が다대다である「like」テーブルがあります.
  • Aliasを使用すると、ユーザーとPostの追加関係を表現できます.
    折りたたみテーブルlikeを作成する場合,ユーザとPostはそれぞれLiker,Likedのaliasで表される.
    次の図に示すように、文章で好きなユーザー情報をクエリーします.
    const post = await Post.findOne({
      where: { postKey, isDeleted: false },
        {
          model: User,
          as: 'Liker',
          attributes: ['id'],
        }
      ]
    })
    この結果は、次の情報をクエリーします.
    {
     // ... post 컬럼정보들
    "Liker": [
      {
      "id": 1,
      "likes": {
        "createdAt": "2021-06-12T06:33:52.000Z",
        "updatedAt": "2021-06-12T06:33:52.000Z",
        "postId": 1,
        "userId": 1
        }
      }
    ]
    }
    likeテーブルの情報が不要な場合は、これらの情報を除外するには、次のようにクエリーする必要があります.
    const post = await Post.findOne({
      where: { postKey, isDeleted: false },
        {
          model: User,
          as: 'Liker',
          attributes: ['id'],
          through: {
            attributes: []
          }
        }
      ]
    })
    この結果はlikeテーブルのカラム情報を除外します.以下に示します.
    //결과
    {
    //...post 컬럼정보 etc
    "Liker": [
     {
     "id": 1
     }
    ]	
    }