【问题标题】:Trying to make a matchmaking function尝试做一个配对功能
【发布时间】:2021-12-15 09:55:45
【问题描述】:

所以我试图根据他的奖杯为用户找到一个对手,当条件不运行时它工作正常,但当条件运行时,它运行无限循环

const UserProfile = require("../schemas/userProfile")
async function matchmake(user, message) {

   let UserProfileDetails = await UserProfile.findOne({ userID: user.id });
   let userTrophies = UserProfileDetails.trophies;

   let userMatched = await UserProfile.aggregate([
      { $match: { trophies: { $gte: userTrophies - 10, $lte: userTrophies + 10 } } },
      { $sample: { size: 1 } }
   ]);

   let otherUserID = userMatched[0].userID;
   console.log("userID -"+otherUserID);
   if (otherUserID === user.id) {
      otherUserID = await matchmake(user, message);
   }
   return otherUserID;
}

module.exports = { matchmake }```


【问题讨论】:

    标签: javascript mongodb discord discord.js


    【解决方案1】:

    如果是无限循环,您的聚合似乎一直在拉取与“user.id”相同的用户,这会一遍又一遍地递归调用 matchmake 函数。

    我会尝试在您的匹配项中添加一个 $not 条件来检查 user.id。这样,聚合不会返回原始用户。

    【讨论】:

    • 所以我调试并发现它正在将 userTrophies - 10, userTrophies + 10 添加到奖杯本身中,并且由于没有这么多奖杯的文件,它一直占用我的文件。我试图像这样改变它,但它仍然没有工作let userMatched = await UserProfile.aggregate([ { $match: { trophiesGtLte: { $gte: [ "$trophies", lowerLimit ], $lte: [ "$trophies", upperLimit ] }, userIDSameOrNot: { $ne: [ "$userID", user.id ] }} }, { $sample: { size: 1 } } ]) userMatched 输出 []...这意味着没有找到文档 eh
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2018-03-22
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多