pouchdb удалить все документы Javascript

Я новичок в pouchdb и не могу понять API.

Я хочу знать, каков наилучший способ удалить все документы с кодом JavaScript. Я пробую много вещей, но ничего не получается.

Должен ли я использовать некоторые параметры в методе allDocs, такие как:

db.allDocs({include_docs: true, deleted: true})

6 ответов

Решение

Извините, API так запутанно! Если вы можете сообщить нам, как его улучшить, это было бы полезно.:)

Вы можете сделать db.destroy(), который полностью стирает базу данных, но не копирует удаления, или вы можете индивидуально remove() все документы:

db.allDocs().then(function (result) {
  // Promise isn't supported by all browsers; you may want to use bluebird
  return Promise.all(result.rows.map(function (row) {
    return db.remove(row.id, row.value.rev);
  }));
}).then(function () {
  // done!
}).catch(function (err) {
  // error!
});

`` `

Основываясь на ответе Нлавсона, вы также можете использовать bulkDocs, поэтому вам не нужно запускать операцию Pouch для каждого документа:

db.allDocs({include_docs: true}).then(allDocs => {
  return allDocs.rows.map(row => {
    return {_id: row.id, _rev: row.doc._rev, _deleted: true};
  });
}).then(deleteDocs => {
  return db.bulkDocs(deleteDocs);
});

Вы можете разрушить и создать его снова

использовать destroy()

      var db = new PouchDB('mydb');

var reset = function() {
  db.destroy().then(function() {
    db = new PouchDB('mydb');
  });
};

сбросить

      reset()

Если обещания недоступны, вы можете использовать обратные вызовы и счетчик, если хотите получить уведомление о том, что все строки были удалены.

db.allDocs().then(function(_response){
    var toBeDeleted = _response.rows.length;
    _response.rows.forEach(function(row){
        db.remove(row.id, row.value.rev, function(err, success){
            if(err){
                console.error(err);
            }
            else if(success){
                console.log("document with id %s was deleted", row.id);
            }
            if(--toBeDeleted == 0){
                console.log("done");
            }
        });
    });
});
      db.allDocs({ include_docs: true }).then(response => {
  let documents = response.rows.map(res => {
    return {
      _id: res.id,
      _rev: res.value.rev,
      _deleted: true
    }
  });

  db.bulkDocs(documents, (err, response) => {
    if (!err) { console.log('Documents deleted successfully!'); } else {
      console.log('Documents could not be deleted');
    }

  })
})

Было бы легко, если бы вы использовали пакет pouchdb-erase npm. Ссылка показывает, как использовать его в nodejs, однако я использовал его в angular 2, и он работает как шарм. Вот часть моего кода.

import * as PouchDB from 'pouchdb';
@Injectable()
export class DBProvider {
  private _db;
  private _data;

  constructor() {
    window["PouchDB"] = PouchDB;//Debugging
    PouchDB.plugin(require('pouchdb-erase'));
  }

truncate(){
    this._db.erase().then(res=>{
        console.log(res);
    }).catch(err=>{
console.log(err);
    });
  }
}
Другие вопросы по тегам