pouchdb删除allDocs javascript

时间:2015-04-26 12:26:03

标签: javascript pouchdb

我是pouchdb的新手,我无法理解API。

我想知道用javascript代码删除所有文档的最佳方法是什么。我尝试了许多东西,但没有任何接缝可以工作。

我是否必须在allDocs方法中使用一些选项,如:

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

5 个答案:

答案 0 :(得分:21)

抱歉,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!
});

```

答案 1 :(得分:7)

基于nlawson的答案,您也可以使用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);
});

答案 2 :(得分:0)

如果promises不可用,您可以使用回调和计数器,如果您想要通知所有行已被删除。

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");
            }
        });
    });
});

答案 3 :(得分:0)

您可以销毁并重新创建

使用destroy()

var db = new PouchDB('mydb');

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

重置

reset()

答案 4 :(得分:-1)

如果您使用pouchdb-erase npm包,这将很容易。链接显示如何在nodejs中使用它,但我在角度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);
    });
  }
}