mongoose 为什么不增加高于第2位

uubf1zoe  于 2023-03-12  发布在  Go
关注(0)|答案(1)|浏览(120)

我想为每个创建的用户显示一个排名(数字)。
前端视图https://i.stack.imgur.com/24ngV.png
后端代码为第一个用户创建数字1,为第二个用户创建数字2。它应该继续3,4,5,...但在数字2之后,它没有执行。
我使用java脚本作为后端,MongoDB作为数据库,Mongoose作为用户模式。

let ranks = 1
    higherRanks = ranks++
    
    const user = new User({
      rank: ranks,
      firstName: req.body.firstName,
      lastName: req.body.lastName, 

    });

    // rank validation

    const rankExist = await User.findOne({rank: ranks}); // search for existing rank
    // increase the rank (number) function
    if (rankExist){
      return new User({
      rank: higherRanks
    })
    }

    await user.save();

    res.json({
      successMessage:"user created",
      user: {
        _id: user._id,
        rank: user.rank,
        firstName: user.firstName,
        lastName: user.lastName,
      },
    });

问题是,为什么不继续数字3,4,5,...?[1]:https://i.stack.imgur.com/24ngV.png

bnlyeluc

bnlyeluc1#

您的代码没有移动到3、4、5的原因是您已经声明了let ranks = 1higherRanks = ranks++,这意味着最初rank是1,递增后将是2。
所以,每当你要添加一个新用户,它将字直到2.
要解决此问题,您应该先添加用户,然后再递增。请尝试以下方法:

let ranks = 1;
const highRankUser = await User.findOne().sort({rank: -1});
if (highRankUser) {
  ranks = highRankUser.rank + 1;
}
const user = new User({
  rank: ranks,
  firstName: req.body.firstName,
  lastName: req.body.lastName, 
});
await user.save();
res.json({
  successMessage:"user created",
  user: {
    _id: user._id,
    rank: user.rank,
    firstName: user.firstName,
    lastName: user.lastName,
  },
});

相关问题