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