javascript 如何找到一个随机用户名和配置文件img与相同的用户城市位置?

oalqel3c  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(73)

如何找到一个随机用户的用户名和配置文件img与相同的用户城市位置?我想这样做,如果一个用户发送请求到我的后端我的后端首先得到城市名称的用户谁reqested到后端比我的后端找到一个随机用户与相同的城市名称,并给予该用户的随机用户的用户名与配置文件img我怎么能这样做Nodejs?例如“tinder如果你选择本地按钮比你只会得到的人谁住在你的城市”

const userSchema = new mongoose.Schema({
    username: {
        type: String,
        require: true
    },
    email: {
        type: String,
        require: true,
        unique: true
    },
    password: {
        type: String,
        require: true,
    },
    profileImg: {
        type: String,
        default: ''
    },
    city: {
      type: String,
      default: ''
    }
})

它总是给我没有用户发现与该城市,即使我有两个用户与同一城市

router.get('/random-user', async (req, res) => {
  try {
    const city = req.query.city;

    const count = await User.countDocuments({ city: city });
    if (count === 0) {
      return res.status(404).json({ error: 'No users found with that city' });
    }

    const random = Math.floor(Math.random() * count);
    const user = await User.findOne({ city: city })
      .skip(random)
      .select('username profileImg')
      .exec();

    res.json(user);
  } catch (err) {
    res.status(500).json({ error: err });
  }
});
rqcrx0a6

rqcrx0a61#

您可以使用$match$sample进行聚合,这将根据matchsample返回随机数量的文档

router.get("/random-user", async (req, res) => {
  try {
    const city = req.query.city;

    const count = await User.countDocuments({ city: city });
    if (count === 0) {
      return res.status(404).json({ error: "No users found with that city" });
    }

    const randomUser = await User.aggregate([
      {
        $match: {
          city: city,
        },
      },
      {
        $sample: {
          size: 1,
        },
      },
      ,
      {
        $project: {
          username: 1,
          profileImg: 1,
        },
      },
    ]);

    res.json(randomUser);
  } catch (err) {
    res.status(500).json({ error: err });
  }
});

Playground示例:https://mongoplayground.net/p/PZtrazJGhZw
单击操场左上角的Run(运行),您将看到结果是随机的

相关问题