如何从 couchdb 中一条一条地获取记录
How to fetch one by one record from couch db
假设,我的 couch 数据库中有 1000 条记录。需要在nodeJS中逐一获取记录。
我正在尝试获取记录,但无法一一获取
OP 标签包括 couchdb
和 couchbase
,它们 不 相同。我假设这个答案是 CouchDB,所以 couchdb-nano 符合要求。
基本策略是通过使用 limit
参数将结果限制为一个文档,从 /{db}/_all_docs 端点获取第一个文档,然后利用 start_key
、limit
和skip
参数获取下一个文档。
例如,
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;
}
假设,我的 couch 数据库中有 1000 条记录。需要在nodeJS中逐一获取记录。
我正在尝试获取记录,但无法一一获取
OP 标签包括 couchdb
和 couchbase
,它们 不 相同。我假设这个答案是 CouchDB,所以 couchdb-nano 符合要求。
基本策略是通过使用 limit
参数将结果限制为一个文档,从 /{db}/_all_docs 端点获取第一个文档,然后利用 start_key
、limit
和skip
参数获取下一个文档。
例如,
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;
}