angularjs - 从 PouchDB(或 CouchDB)获取随机文档

标签 angularjs couchdb pouchdb

我正在使用 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/

相关文章:

javascript - 如何控制台登录couchdb

python - 无法在 Couchdb 上运行 Python View

couchdb - 沙发数据库中的 "Error starting replication"

javascript - 当两个数组之间找到匹配项时停止迭代并返回 true

pouchdb,如何将自定义 header 添加到 HTTP 同步请求?

javascript - Angular - 干净的 URL - 资源解释为样式表,但使用 MIME 类型 text/html 进行传输

angularjs - 如何在AngularJS服务Jasmine测试中模拟$ http?

javascript - 数组与单个对象 - AngularJS/Javascript(基础)

angularjs - 跨嵌套组件绑定(bind)输出不起作用

javascript - 错误 : connect ENFILE 127. 0.0.1:5984 - 本地(未定义:未定义)