ApolloServer / Mongoose查询,用于查找投票的投票成员并汇总所有投票

时间:2019-06-22 20:07:47

标签: javascript node.js mongodb mongoose apollo-server

我正在构建一个类似投票应用程序的应用程序,该应用程序中有组(我将其命名为会话),我想检查所选民意测验的投票数是否等于该组的成员数,如果是,则自动求和,找到平均数并将其保存为结果。

现在我可以添加投票和投票

我正在使用node.js apollo-express-server,所以这是我的模式

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

0 个答案:

没有答案