首页 > 解决方案 > 您如何访问 mongoose 查询中的现有值?

问题描述

几乎我已经为用户构建了一个应用程序来获得积分,每 10 分他们应该获得一个奖杯。RewardPoints 是整数,Trophies 是一个数组。我想在用户付款时增加奖励积分,同时如果更新后的现有积分为 10 或 20 或 30 等,则进行验证以推送奖杯。我以某种方式使用普通 js 而不使用推送(简单地使用math.floor() 设置 numoftrophies) 在 .exec() 函数中,但我在 user.save() 上出现了其他问题。我想改变这个:

  User.findById(req.body.userID).exec(function(err, user){
    if (err){throw err;}        

    user.rewardPoints = user.rewardPoints + 1;

    let trophyNumbers =  Math.floor(user.rewardPoints / 10)

    user.trophies = trophyNumbers;

    user.save();

})

像这样:

    User.update({ _id: req.body.userID },
    {
        $inc: { rewardPoints: 1 },
        $push: {
            trophies: {
                trophy: new Date(),
                trophyNum: Math.floor(rewardPoints / 10)
            }
        }
    })
    .exec(function (err, res) {

        if (err) { throw err; }
        //trophy must be added every 10 points
        console.log('points saved');
    });

我如何访问 $push of trophies 中现有的奖励积分?如果有人可以提供帮助,我将不胜感激。

标签: javascriptnode.jsmongodbmongoosenosql

解决方案


尝试这个:

 User.findById(req.body.userID).exec(function (err, user) {
        if (err) { throw err; }

        let newRewardPts = user.rewardPoints + 1;

        User.update({ _id: req.body.userID },
          {
            $inc: { rewardPoints: 1 },
            $addToSet: {
              trophy: new Date(),
              trophyNum: Math.floor(newRewardPts / 10)
            }
          })
          .exec(function (err, res) {

            if (err) { throw err; }
            //trophy must be added every 10 points
            console.log('points saved');
          });

      })

推荐阅读