ZetCode

PouchDB 教程

最后修改于 2023 年 10 月 18 日

PouchDB 教程展示了如何在 JavaScript 中使用 PouchDB。本教程中的 PouchDB 代码示例在数据库中插入、删除和删除文档。

PouchDB

PouchDB 是 CouchDB 的 JavaScript 实现。PouchDB 可以在浏览器中使用,也可以在本地 Node 中使用,还可以通过 HTTP 协议远程使用。

默认情况下,PouchDB 附带了用于浏览器的 IndexedDB 适配器、Node.js 中的 LevelDB 适配器以及用于远程数据库的 CouchDB 适配器。

Apache CouchDB 是一个面向文档的开源 NoSQL 数据库。它用 Erlang 语言实现,使用 JSON 存储数据,JavaScript 作为其查询语言,并使用 HTTP 作为 API。

PouchDB 创建数据库

要创建一个新的数据库,我们实例化一个新的 PouchDB 对象。如果数据库已经存在,它会创建一个对该数据库的引用。

const db = new PouchDB('mydb');

我们创建一个新的 mydb 数据库。根据运行位置的不同,它会在浏览器、Node 或远程 CouchDB 数据库服务器中创建一个新的数据库。

浏览器中的 PouchDB

我们展示了如何在浏览器中使用 PouchDB。

public/index.html
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script src="js/pouchdb-7.0.0.min.js"></script>
    <script>

        const db = new PouchDB('users');

        db.info()
            .then((info) => {
                console.log(info);
            })
    </script>
</body>

</html>

我们下载了 pouchdb 的最小化版本,并将其包含在 script 标签中。然后我们创建一个新的 users 数据库,并将有关它的信息写入控制台。要检查创建的数据库,我们转到浏览器开发工具的存储检查器。

Storage browser in Chrome
图:Chrome 中的存储浏览器

这是 Google Chrome 中的存储浏览器。只要标签页存在,数据就会持久保存。

Node 上 PouchDB 的安装

我们在 Node 上安装 PouchDB。

$ npm init -y
$ npm i pouchdb

我们创建一个新的 Node 项目并安装 PouchDB。

PouchDB 创建文档

使用 put 方法创建一个新的 PouchDB 文档。

insert_doc.js
const PouchDB = require('pouchdb');

const db = new PouchDB('mydb');

doc = {
    _id: new Date().toISOString(),
    name: 'Peter',
    age: 23,
    occupation: 'designer'
};

db.put(doc).then((res) => {
    console.log("Document inserted OK");
}).catch((err) => {
    console.error(err);
});

该示例在本地创建一个新的 mydb 数据库。

doc = {
    _id: new Date().toISOString(),
    name: 'Peter',
    age: 23,
    occupation: 'designer'
}

这是一个要插入数据库的新文档。我们提供一个 _id

db.put(doc).then((res) => {
    console.log("Document inserted OK");
}).catch((err) => {
    console.error(err);
});

文档被插入到数据库中。

$ ls mydb/
000022.ldb  000024.ldb  000025.log  CURRENT  LOCK  LOG  LOG.old  MANIFEST-000023

一个新的数据库在本地创建在 mydb 目录中。

或者,我们可以使用 post 创建一个新文档。当使用 post 时,_id 会自动为我们生成。

insert_doc2.js
const PouchDB = require('pouchdb');

const db = new PouchDB('mydb');

doc = {
    name: 'Peter',
    age: 23,
    occupation: 'designer'
};

db.post(doc).then((res) => {
    console.log("Document inserted OK");
}).catch((err) => {
    console.error(err);
});

在本例中,我们使用 post 创建一个新文档。该文档被赋予一个自动生成的 _id,例如 b781309e-0423-4b3e-96ad-238cf50debce

PouchDB 获取文档

要从数据库中检索文档,我们使用 get 函数。

get_doc.js
const PouchDB = require('pouchdb');

const db = new PouchDB('mydb');

db.get('b781309e-0423-4b3e-96ad-238cf50debce').then((doc) => {
    console.log(`${doc.name}, ${doc.age}, ${doc.occupation}`);
}).catch((err) => {
    console.error(err);
});

我们从数据库中检索一个文档。我们向 get 方法提供一个 _id

$ node get_doc.js
Peter, 23, designer

PouchDB 删除文档

要从数据库中删除文档,我们使用 remove 函数。

get_doc.js
const PouchDB = require('pouchdb');

const db = new PouchDB('mydb');

db.get('b781309e-0423-4b3e-96ad-238cf50debce').then((doc) => {
    return db.remove(doc);
}).then((res) => {
    console.log("The document has been removed");
}).catch((err) => {
    console.error(err);
});

为了删除一个文档,我们必须首先使用 get 获取它,然后使用 remove 删除它。

PouchDB bulkDocs

使用 bulkDocs 方法,我们可以在一次批量操作中将许多文档写入数据库。

create_users.js
const PouchDB = require('pouchdb');

const db = new PouchDB('users');

doc1 = { _id: 'peter43@gmail.com', name: 'Peter', age: 23, occupation: 'designer' };
doc2 = { _id: 'sofia23@gmail.com', name: 'Sofia', age: 44, occupation: 'teacher' };
doc3 = { _id: 'paul54@gmail.com', name: 'Paul', age: 25, occupation: 'driver' };
docs = [doc1, doc2, doc3];

db.bulkDocs(docs).then((res) => {

    console.log("Documents inserted OK");
}).catch(() => {
    console.error(err);
});

在本例中,我们创建一个新的 users 数据库,并使用 bulkDocs 插入三个文档。

PouchDB allDocs

allDocs 是另一个 PouchDB 批量方法;它在一个步骤中检索许多文档。

all_docs.js
const PouchDB = require('pouchdb');

const db = new PouchDB('users');

db.allDocs({ include_docs: true, descending: true }, (err, doc) => {

    doc.rows.forEach(e => {
        console.log(e.doc);
    });

}).catch((err) => {
    console.error(err);
});;

在本例中,我们从 users 数据库中获取所有文档。

$ node all_docs.js
{ name: 'Sofia',
  age: 44,
  occupation: 'teacher',
  _id: 'sofia23@gmail.com',
  _rev: '1-80b0fba21acf487fc20ac499e928acd7' }
{ name: 'Peter',
  age: 23,
  occupation: 'designer',
  _id: 'peter43@gmail.com',
  _rev: '1-182869c3c446731fa8b6106910b87d8e' }
{ name: 'Paul',
  age: 25,
  occupation: 'driver',
  _id: 'paul54@gmail.com',
  _rev: '1-31bfc20f010c9a6127cb44d6621cee5c' }

PouchDB 更新文档

在下面的例子中,我们展示了如何更新一个文档。

update_doc.js
const PouchDB = require('pouchdb');

const db = new PouchDB('users');

db.get('sofia23@gmail.com').then((doc) => {

    doc.age = 45;
    return db.put(doc);
}).then(() => {

    return db.get('sofia23@gmail.com');
}).then((doc) => {

    console.log(doc);
}).catch((err) => {

    console.error(err);
});

为了更新一个文档,我们检索它,修改其属性,并将其放回数据库。

来源

PouchDB 指南

在本文中,我们使用了 PouchDB 数据库。我们创建了几个代码示例,展示了如何创建与 PouchDB 交互的 JavaScript 程序。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

查看 所有 JavaScript 教程。