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