您如何访问猫鼬查询中的现有值?

时间:2018-09-24 17:09:28

标签: javascript node.js mongodb mongoose nosql

我几乎已经建立了一个应用程序供用户获取积分,他们每获得10积分就应该获得奖杯。奖励积分是整数,奖杯是一个数组。我想在用户付款时增加奖励积分,同时如果更新后的现有积分为10或20或30等,则同时进行验证以推送奖杯。我已经以某种方式使用普通js而不使用push(仅使用math.floor()在.exec()函数内部设置numoftrophies),但是在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中现有的奖励积分?如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

尝试一下:

 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');
          });

      })