node.js - 如何使用 Mongoose 在 mongodb 中查找或获取随机记录或文档
问题描述
我试图找到一种使用猫鼬在 MongoDB 中获取随机记录/文档的方法,但没有成功。
我在四 (4) 年前在这里找到的解决方案失败并没有解决我的问题,因为它倾向于根据生成的随机数跳过一些文档。
问题是,如果您在数据库中有 3 个文档并且生成的随机数是 3,请按照此处指定的方式执行以下操作:
User.findOne().skip(random).exec(
function (err, result) {
// Tada! random user
console.log(result)
})
...将.skip(3)
跳过整个三个文档并返回 [] ( 404 错误)。
我想要的是在任何时候洗牌User.find()
解决方案
这就是我解决这个问题的方法
const users = await User.find().limit(50); // limit can be any number, each time you make a request, values will always be returned if have records is in your MongoDB
const randomUsers = users.sort(() => Math.random() - 0.5);
return res.status(200).send({ success: true, message: 'success: random users', data: randomUsers });
每当您提出请求时,您肯定会得到一条记录,但会根据生成的随机数对列表进行打乱、重新排序或随机化。
相信这为您解决了类似的问题!
推荐阅读
- c++ - VIsual Studio 2019 非活动代码未灰显
- reporting-services - SSRS 在行和列范围内进行聚合
- c# - MS linq to sql 生成器 - 序列包含多个元素
- c - 我的 C 程序可以热加载用 lua 编写的配置文件吗?
- powershell - 如何将 2 个错误输出合并为一个
- java - org.apache.commons.vfs.FileSystemException:无法在端口 21 上的“sftp://username:***@114.XX.XX.XX/”连接到 SFTP 服务器
- java - ArrayDeque vs LinkedList 作为级别顺序遍历的队列
- javascript - 如何在 JavaScript 中管理输出中的小数点
- mrtk - 如何始终获得光线投射的提示?
- mysql - 使用包含时间戳的特定名称在特定位置备份 MySQL 数据库