Как импортировать/экспортировать базу данных из PouchDB

Как импортировать/экспортировать базу данных из локальной базы данных PouchDB? Мне нужно сохранить мою локальную базу данных и открыть ее на другой платформе. На стороне сервера нет CouchDB.

Ответ 1

Есть функции, закодированные удивительным @nolanlawson. Не только вы можете импортировать/экспортировать его, вы можете делать с ним всевозможные вещи. Просто потрясающе.

Репликация потока PouchDB https://github.com/nolanlawson/pouchdb-replication-stream

ReadableStreams и WritableStreams для репликации PouchDB/CouchDB. В принципе, вы можете копировать две базы данных, просто присоединяя потоки вместе. Это имеет много применений: дамп базы данных в файл и затем загрузите тот же файл в другую базу данных. Сделайте быстрый начальный репликации путем сброса содержимого CouchDB в конечную точку HTTP, который затем загружается в PouchDB в браузере. Репликация через Интернет Розетки? За Bluetooth? Над NFC? Почему нет? Поскольку репликация поток - это просто текстовый текст JSON, вы можете отправить его на любой транспорт механизм. Периодически создавайте резервную копию своей базы данных.

И PouchDB.load для импорта: https://github.com/nolanlawson/pouchdb-load

Клиентские инструменты для загрузки дампа из базы данных CouchDB/PouchDB. Для демпинга, проверьте pouchdb-dump-cli, чтобы свалить из командной строки, или pouchdb-replication-stream для сброса из Node.js выражение. Этот метод обычно намного быстрее, чем стандартный репликации, поскольку он использует меньше HTTP-запросов. Так что это отличный способ для быстрой загрузки исходного состояния для вашей базы данных.

Ответ 2

Чтобы экспортировать, почему бы вам просто не загружать все документы и не сохранять их в файл?

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

Ответ 3

Как сказал @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);
  }
}

Также проверьте функцию загрузки.