ApolloServer / Mongoose запрос для поиска проголосовавших участников для опроса и суммирования всех голосов - PullRequest
0 голосов
/ 22 июня 2019

Я создаю что-то вроде приложения для голосования, в котором у меня есть группы (я назвал их сессиями), и я хочу проверить, равно ли количество голосов в выбранном опросе количеству членов группы, если оно истинно, то автоматически суммируется, найдите среднее число и сохраните его в результате.

На данный момент я могу добавить опрос и голосовать

Я использую apollo-express-server node.js, так что вот мои схемы

const sessionSchema = new Schema(
  {
    name: String,
    cardSet: String,
    createdBy: {
      type: Schema.Types.ObjectId,
      ref: 'User',
    },
    polls: [{
      type: Schema.Types.ObjectId,
      ref: 'Poll',
    }],
    members: [{
      type: Schema.Types.ObjectId,
      ref: 'User',
    }],
  },
)

const pollSchema = new Schema(
  {
    topic: String,
    description: String,
    result: Number,
    priority: {
      type: String,
      enum: ['M', 'S', 'C', 'W'],
      default: 'M',
    },
    session: {
      type: Schema.Types.ObjectId,
      ref: 'Session',
    },
    votes: [{
        type: Schema.Types.ObjectId,
        ref: 'Vote',
    }],
  },
)

const voteSchema = new Schema(
  {
    value: Number,
    poll: {
      type: Schema.Types.ObjectId,
      ref: 'Poll',
    },
    user: {
      type: Schema.Types.ObjectId,
      ref: 'User',
    },
  },
)
 // Polls
    addPoll: async (parent, args, { req, models }, info) => {
      isAuthenticated(req)

      const poll = await models.Poll.create(args)

      await models.Session.updateOne(
        { _id: args.session },
        { $push: { polls: poll } },
      )

      return poll
    },

    // Votes
    addVote: async (parent, args, { req, models }, info) => {
      isAuthenticated(req)

      const { pollId, userId, value } = args

      const poll = await models.Poll.findById(pollId)
      const user = await models.User.findById(userId)

      if (!poll) return null
      if (!user) return null

      // Create vote
      const vote = await models.Vote.create({
        poll: pollId,
        user: userId,
        value: value,
      })

      // Add new vote to poll
      await models.Poll.findOneAndUpdate(
        { _id: pollId },
        { $push: { votes: vote } },
      )

      return vote
    },

Я хочу завершить голосование после того, как каждый участник группы проголосует, а затем найти среднюю сумму всех голосов и сохранить ее в result в схеме опроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...