首页 > 解决方案 > 即使是状态 200,我的更新数据也不会反映

问题描述

我想通过更新来增加玩家的分数。这是电话。

const addPlayerScore = async (score, currentPlayer) => {
        try {
            const addScore = {
                score: score,
            };
            const { data } = await fetchContext.authAxios.patch(
                `/facilitator/add-score-player-team-one/${currentPlayer}`,
                addScore
            );
            console.log(data.message);
        } catch (error) {
            const { data } = error.response;
            console.log(data.message);
        }
    };

currentPlayer获取玩家的id。我将其传递给参数。

这是请求;

exports.addscoreplayerteamone = async (req, res) => {
    try {
        const { score } = req.body;

        const existLive = await LiveMatch.findOneAndUpdate(
            {
                'teamOne.players._id': req.params.id,
            },
            {
                $set: {
                    $inc: {
                        'teamOne.players.$.scores': score,
                    },
                },
            },
            { new: true }
        );

        const addPlayerScore = await existLive.save();

        res
            .status(200)
            .send({ message: "Added the player's score", addPlayerScore });
    } catch (error) {
        console.log(error);
        return res.status(400).json({
            message: 'There was a problem adding a score',
        });
    }
};

这是架构;

const mongoose = require('mongoose');

const liveSchema = new mongoose.Schema(
    {
        schedule: {
            type: mongoose.Types.ObjectId,
            required: true,
        },
        user: {
            type: mongoose.Types.ObjectId,
            required: true,
        },
        teamOne: {
            teamName: {
                type: String,
                required: true,
                trim: true,
                max: 50,
            },
            players: [
                {
                    name: {
                        type: String,
                        required: true,
                        trim: true,
                        max: 50,
                    },
                    jerseyNumber: {
                        type: String,
                        required: true,
                        trim: true,
                    },
                    scores: {
                        type: Number,
                        default: 0,
                        trim: true,
                    },
                    fouls: {
                        type: Number,
                        trim: true,
                    },
                },
            ],
            score: {
                type: Number,
                trim: true,
                default: 0,
            },
        },
        teamTwo: {
            teamName: {
                type: String,
                required: true,
                trim: true,
                max: 50,
            },
            players: [
                {
                    name: {
                        type: String,
                        required: true,
                        trim: true,
                        max: 50,
                    },
                    jerseyNumber: {
                        type: String,
                        required: true,
                        trim: true,
                    },
                    scores: {
                        type: Number,
                        default: 0,
                        trim: true,
                    },
                    fouls: {
                        type: Number,
                        trim: true,
                    },
                },
            ],
            score: {
                type: Number,
                trim: true,
                default: 0,
            },
        },
        gameEvent: {
            type: String,
            required: true,
            enum: ['basketball', 'volleyball', 'soccer'],
        },
        winner: {
            type: String,
            trim: true,
        },
        loser: {
            type: String,
            trim: true,
        },
    },
    { timestamps: true }
);

module.exports = mongoose.model('live-match', liveSchema);

它返回状态 200,但它不会增加数据库中玩家的分数,也不会反映在前端。

标签: reactjsmongodbexpressmongoose

解决方案


尝试这个:

const existLive = await LiveMatch.findOneAndUpdate(
  {
     'teamOne.players._id': req.params.id,
  },
  {
     $inc: { 'teamOne.players.scores': score }
  }, 
  { 
     new: true  
  }
);


推荐阅读