Попытка обновить поле отдельного объекта, а также нажать на массив nodejs mongodb - PullRequest
0 голосов
/ 02 марта 2020

В этой функции поста я пытаюсь присвоить значок, а затем, после того, как значок был назначен в массиве для пользовательской модели, я пытаюсь обновить отдельное поле в пользовательской программе: c, которую я назвал точкой, баллы udo c .total в настоящее время работают, однако после завершения вызова итоговые баллы пользователей не обновляются и остаются как 0 Схема пользовательской модели -

var schema = new Schema({
    email : {type:String, require:true},
    username: {type:String, require:true},
    password:{type:String, require:true},
    creation_dt:{type:Date, require:true},
    diabeticType:{type:String, require:true},
    badges: [Badges],
    totalPoints: {type:Number, require:true},
    glucoseReading : [
        {
            bloodGlucoseLevel : {
                type : String,
                required : "Required"
            },
            dosageTime : {
                type : String,
            },
            unitsOfInsulinForFood : {
                type : String,
            },
            correctionDose : {
                type : String,
            },

            creation_dt :{
                type : String,
            }
        }
    ]
});

, а затем это команда post, где значок добавлено в профиль пользователя, но общее количество баллов не обновляется

router.post("/:id/badge/:bid", function (req, res){{'useFindAndModify', false}
  Badgemodel.findById(req.params.bid).then(doc => {
    if(!doc) 
    { 
        return res.status(404).end();
    }
    else
    {
        var awardBadge = doc;
        Usermodel.findByIdAndUpdate(req.params.id,
            {$push : {badges : awardBadge}},

            {safe : true, upsert: true}).then(udoc =>{
                if(!doc) 
                { 
                    return res.status(404).end();
                }
                else
                {
                    console.log(udoc);
                    console.log(udoc.totalPoints);
                    udoc.totalPoints = udoc.totalPoints + awardBadge.value;
                    console.log(udoc.totalPoints);
                    return res.status(200).end();

                }
            })
    }
})

})

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Ответ. Я сохранял значение общего количества баллов в переменной, и эта переменная не отправлялась обратно в информацию пользователей. Я обновил код, добавив еще одну findbyidandupdate и включив функцию $ set, чтобы обновить общее количество очков пользователей до значения переменной udo c .total points.

router.post ("/: id / badge /: bid", function (req, res) {{'useFindAndModify', false} Badgemodel.findById (req.params.bid) .then (do c => {if (! Do c) {return res.status (404) .end ();} else {var awardBadge = doc; Usermodel.findByIdAndUpdate (req.params.id, {$ pu sh) : {badges: awardBadge}},

        {safe : true, upsert: true}).then(udoc =>{
            if(!doc) 
            { 
                return res.status(404).end();
            }
            else
            {
                console.log(udoc);
                console.log(udoc.totalPoints);
                udoc.totalPoints = udoc.totalPoints + awardBadge.value;
                Usermodel.findByIdAndUpdate({_id: req.params.id}, {$set: {totalPoints : udoc.totalPoints} }).then(doc => {
                    if(!doc) 
                    { 
                        return res.status(404).end();
                    }
                    else
                    {

                        return res.status(200).end();
                        res.send(doc);

                    }
                })   
                console.log(udoc.totalPoints);
                return res.status(200).end();
                res.send(doc);

            }
        })
}

})

})

0 голосов
/ 02 марта 2020

Я думаю, у вас есть ошибка в вашей пользовательской схеме. Вы пытаетесь сослаться на массив документов из коллекции Badges в определении пользовательской схемы по адресу badges: [Badges],.

Но когда вы ссылаетесь на do c из другой коллекции в mon goose, синтаксис другой. Оформить заказ mon goose документы .

Схема должна выглядеть следующим образом:

badges: [{
   type: Schema.Types.ObjectId,
   ref: "UserModel" // or whatever the Model name is
}]

см. Также https://mongoosejs.com/docs/api/schematype.html#schematype_SchemaType -ref

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