我正在使用 Angular 和 Ionic 设计一个问答应用。我有大约 2000 个 json 格式的问题,我选择 PouchDB 作为数据库。 CouchDB 非常适合我:我可以在服务器上添加新问题和应用程序自动更新问题和答案。
但我现在有一个疑问:我找不到从 Pouch 中获取随机文档的方法。在我的应用程序中,我将从某些选定的部分生成测验,并且我必须从我的数据库中获取数量可变的文档。
我正在使用 db.allDocs([options], [callback])
api,我可以设置一个限制,但我找不到获取随机文档的方法。
有什么解决办法吗?
最佳答案
@nlawson 给出的第一个解决方案并不总是有效,例如我必须删除所有获取的文档,所以我丢失了 ID 序列,例如:
我有一个 id 从 1 到 5 的文档列表
1-随机为3
2- 获取 id 为 3 的文档
3- 删除 id 为 3 的文档 数据库状态 [1,2,4,5]
4- 如果 random 不是 3 重复上述步骤,但如果 random 是 3 或任何 id 已经删除它会导致问题,所以这个解决方案不起作用,所以我找到了另一个解决方案:
回答:
使用 Mango querie find(),用这段代码
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开始witch是3-1=2得到有限数量的文档limit是1 => [2]
所以它总是会返回位置 rand 上的文档。
附言:要使用 find(),您必须在 pouch 之上安装这个库 pouchdb.find.js
关于angularjs - 从 PouchDB(或 CouchDB)获取随机文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513522/