web-dev-qa-db-ja.com

PouchDBからデータベースをインポート/エクスポートする方法

ローカルのPouchDBデータベースからデータベースをインポート/エクスポートする方法は?ローカルデータベースを保存して、別のプラットフォームで開く必要があります。サーバー側にはCouchDBはありません。

13
pZCZ

素晴らしい@nolanlawsonによってコード化された機能があります。インポート/エクスポートできるだけでなく、さまざまなことができます。ただ素晴らしい。

PouchDBレプリケーションストリームhttps://github.com/nolanlawson/pouchdb-replication-stream

PouchDB/CouchDBレプリケーション用のReadableStreamsおよびWritableStreams。基本的に、ストリームを一緒に接続するだけで2つのデータベースを複製できます。これには多くの用途があります。データベースをファイルにダンプしてから、同じファイルを別のデータベースにロードします。 CouchDBのコンテンツをHTTPエンドポイントにダンプして、ブラウザーのPouchDBにロードすることにより、迅速な初期レプリケーションを実行します。 Webソケットを介して複製しますか?ブルートゥース以上? NFC以上?何故なの?レプリケーションストリームは単なるJSONプレーンテキストであるため、任意のトランスポートメカニズムを介して送信できます。データベースを定期的にバックアップします。

そして、PouchDB.loadをインポートします: https://github.com/nolanlawson/pouchdb-load

CouchDB/PouchDBデータベースからダンプをロードするためのクライアント側ツール。ダンプについては、pouchdb-dump-cliをチェックしてコマンドラインからダンプするか、pouchdb-replication-streamをチェックしてNode.jsアプリケーション内からダンプしてください。この方法は、使用するHTTPリクエストが少ないため、通常、標準のレプリケーションよりもはるかに高速です。したがって、データベースの初期状態をすばやくロードするための優れた方法です。

14
Matías

エクスポートするには、すべてのドキュメントを読み込んでファイルに保存してみませんか?

db.allDocs({include_docs: true, attachments: true}).then(JSON.stringify);
4
mrded

@mrdedが言ったように、最も簡単な解決策はバッチ操作を使用することです。

<button onClick={handleExport}>Export</button>
<input type="file" onChange={handleImport}/>
function handleExport () {
  db.allDocs({include_docs: true}, (error, doc) => {
    if (error) console.error(error);
    else download(
      JSON.stringify(doc.rows.map(({doc}) => doc)),
      'tracker.db',
      'text/plain'
    );
  });
}

function handleImport ({target: {files: [file]}}) {
  if (file) {
    const reader = new FileReader();
    reader.onload = ({target: {result}}) => {
      db.bulkDocs(
        JSON.parse(result),
        {new_edits: false}, // not change revision
        (...args) => console.log('DONE', args)
      );
    };
    reader.readAsText(file);
  }
}

ダウンロード 関数も確認してください。

1
Igor Sukharev