如何从 couchdb 中一条一条地获取记录

How to fetch one by one record from couch db

假设,我的 couch 数据库中有 1000 条记录。需要在nodeJS中逐一获取记录。

我正在尝试获取记录,但无法一一获取

OP 标签包括 couchdbcouchbase,它们 相同。我假设这个答案是 CouchDB,所以 couchdb-nano 符合要求。

基本策略是通过使用 limit 参数将结果限制为一个文档,从 /{db}/_all_docs 端点获取第一个文档,然后利用 start_keylimitskip参数获取下一个文档。

例如,

const nano = require("nano")("http://user:pass@localhost:5984/");
const dbName = "stack";

// Do the thing
(async () => {
    let processed = 0;
    let total_docs = 0;
    try {
        const db = await nano.db.use(dbName);
        let result = await db.list({ limit: 1 });

        total_docs = result.total_rows;

        while (result.rows.length) {
            if (processDocument(result.rows[0])) {
                processed++;
            }
            result = await db.list({ start_key: result.rows[0].key, limit: 1, skip: 1 });
        }
    } catch (err) {
        console.error(err);
    }
    console.info(`\nProcessed ${processed} of ${total_docs} documents`);
})();

// Returns true of the document was processed, false if skipped.
function processDocument(doc) {
    if (doc.key.startsWith("_design/")) {
        return false;
    }
    console.log(doc.key);
    return true;
}