@nlawson 给出的第一个解决方案并不总是有效,例如我必须删除获取的每个文档,所以我丢失了 ID 序列,例如:
我有一个 ID 为 1 到 5 的文档列表
1- 随机为 3
2- 获取 id 为 3 的文档
3- 删除 id 为 3 的文档
数据库状态[1,2,4,5]
4- 如果 random 不是 3 重复上述步骤,但如果 random 是 3 或任何 id 已删除它会导致问题,所以这个解决方案不起作用,所以我找到了另一个解决方案:
回答:
使用Mango queriefind() 和这段代码
let rand = Math.floor(Math.random() * (max - min + 1)) + min;
db.find({
selector: {_id: {$gte : '1'}},
limit : 1,
skip : rand-1,
});
首先我得到一个随机数,最大值是我数据库中的文档数,最小值是 1 作为第一个文档的第一个 ID。
之后我执行 find() 查询以选择 id 大于或等于 1(基本上全部)的文档,将查询限制为仅检索第一个并开始从 rand-1 检索。
要重用 rand 等于 3 的第一个示例,它将是这样的:
1- 获取 ID 大于等于 1 的所有文档
=> [1,2,3,4,5]
2- 从 rand-1 开始,女巫是 3-1=2 获得有限数量的文件,限制是 1
=> [2]
所以它总是会返回位于 rand 位置的文档。
PS:要使用 find(),你必须在 pouch 顶部安装这个库 pouchdb.find.js