【问题标题】:How can count the asscociation in sequelize jssequelize js中如何计算关联
【发布时间】:2020-04-06 14:37:13
【问题描述】:

当我进行以下查询以获取带有选项的投票并且每个选项都有投票计数时。但它会让人费解。

router.get("/", (req, res) => {
  Poll.findAll({
    where: { subjectId: req.query.subjectId },
    include: {
      model: PollOption,
      attributes: {
        include: [[Sequelize.fn("COUNT", "pollVote.id"), "voteCount"]]
      },
      required: false,
      include: {
        model: PollVote,
        // attributes: [],
        required: false
      }
    },
    group:['pollOptions.id']
  }).then(poll => {
    console.log(poll);
    res.send({ poll });
  });
});

我得到这个作为回应

{
    "poll": [
//Array of the poll
           {
            "id": 3,
            "module_id": "mbbs",
            "question": "Test Question Poll",
            "pollOptions": [
                {
                    "id": 1,
                    "pollId": 3,
                    "option": "Option 1",
                    "voteCount": 1,
                    "pollVotes": [
                        {
                            "id": 6,
                            "pollOptionId": 1,
                            "pollId": 3,
                            "userId": 3
                        }
                    ]
                },
                {
                    "id": 2,
                    "pollId": 3,
                    "userId": 120,
                    "option": "Option 2",
                    "voteCount": 2,
                     //Vote must be 1 but return 2
                    "pollVotes": [
                        {
                            "id": 2,
                            "pollOptionId": 2,
                            "pollId": 3,
                            "userId": 1
                        }
                    ]
                }
            ]
        },
        {
            "id": 4,
            "module_id": "mbbs",
            "question": "Test Question Poll 4",
            "subjectId": 1,
            "pollOptions": [
                {
                    "id": 3,
                    "pollId": 4,
                    "option": "Option 1sd",

                    "voteCount": 1,
                    "pollVotes": []
                }
            ]
        }
    ]
}

在哪里 voteCount 是错误的。 我怎样才能使它正确。

Sql查询如下

选择poll.id, poll.module_id, poll.question, poll.userId, userId, poll.poll.poll.@9876543333 @, poll.expireDate, pollOptions.id AS pollOptions.id, pollOptions.pollId AS pollOptions.pollId, pollOptions.@987654344.@AS @987654345., @987654344. option AS pollOptions.option, COUNT('pollVote.id') AS pollOptions.voteCount, pollOptions->pollVotes.id AS pollOptions.pollVotes.id, pollOptions->pollVotes.pollOptionId AS pollOptions.pollVotes.pollOptionId, @987654。 987654357@aspollOptions.pollVotes.pollIdpollOptions->pollVotesuserIdaspollOptions.pollVotes.userIdpollfrompollas@987654363 987654369@左OUTER JOINpollVoteaspollOptions->pollVotesonpollOptionsid=pollOptions->pollVotes=pollOptions->pollVotes

【问题讨论】:

  • 可以分享一下 Sequelize 生成的查询吗?
  • 更新帖子

标签: node.js reactjs sequelize.js


【解决方案1】:

您的sequelize 声明应如下 -

router.get("/", (req, res) => {
  Poll.findAll({
    where: { subjectId: req.query.subjectId },
    include: {
      model: PollOption,
      attributes: {
        include: [[Sequelize.fn("COUNT", `pollOptions->pollVotes.id`), "voteCount"]]
      },
      required: false,
      include: {
        model: PollVote,
        // attributes: [],
        required: false
      }
    },
    group:['pollOptions.id']
  }).then(poll => {
    console.log(poll);
    res.send({ poll });
  });
});

希望对你有帮助!

【讨论】:

  • 不,它给出与上面相同的结果。 sql查询变成
  • Sql查询变为SELECT poll.id, poll.module_id, poll.question, poll.userId, subjectId197654332@1 @, poll.date, poll.expireDate, pollOptions.id AS pollOptions.id, pollOptions.pollId AS @98765434@, @9876454342@, @9876 pollOptions.userId, pollOptions.option AS pollOptions.option, COUNT('pollOptions->pollVotes.id') AS pollOptions.voteCount, pollOptions->pollVotes.id @ AS pollOptions.pollVotes.id@53, 987654356@
  • AS pollOptions.pollVotes.pollOptionId, pollOptions->pollVotes.pollId AS pollOptions.pollVotes.pollId, pollOptions->pollVotes.userId AS pollOptions.pollVotes.userId FROM poll AS @98766543695@LE754366543695@LE AS pollOptions ON poll.id = pollOptions.pollId LEFT OUTER JOIN pollVote AS pollOptions->pollVotes ON pollOptions.id = pollOptions->pollVotes.pollOptionId WHERE poll .subjectId = '1' GROUP BY pollOptions.id;
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 2016-10-15
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多