数据库删除所有文档javascript

数据库删除所有文档javascript,javascript,pouchdb,Javascript,Pouchdb,我是数据库新手,不懂API 我想知道用javascript代码删除所有文档的最佳方法是什么。我尝试了很多事情,但没有一件能奏效 我是否必须在allDocs方法中使用一些选项,如: db.allDocs({include_docs: true, deleted: true}) 抱歉,API太混乱了!如果您能让我们知道如何改进,那将很有帮助。:) 您可以执行db.destroy(),这会完全擦除数据库,但不会复制删除内容,也可以单独执行remove()所有文档: db.allDocs().then

我是数据库新手,不懂API

我想知道用javascript代码删除所有文档的最佳方法是什么。我尝试了很多事情,但没有一件能奏效

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

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

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

```

如果承诺不可用,您可以使用回调和计数器,如果您希望得到所有行都已删除的通知

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

如果您使用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);
    });
  }
}

根据nlawson的回答,您也可以使用bulkDocs,这样您就不必为每个文档运行邮袋操作:

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

你可以破坏它,然后再创建它

使用销毁()

重置

reset()

这段代码有效吗:db.allDocs()…then(函数(响应){var doc;for(doc in response.rows){return db.remove(doc);}});您需要使用
Promise.all()
而不是for循环,否则您将只删除第一个循环。我强烈推荐本指南中的视频:很抱歉回复太晚。关于如何提高对网站的理解,我真的不知道,但我认为你高估了用户的知识。我对PockDB非常陌生,在阅读了你们网站上的内容后,我花了很多时间进行研究。另外,这些样品是针对具体情况制作的,当我想做一些不同的事情时,我完全不知所措。这可能是一种印象,但我认为所有的词汇都无法描述。我真的很努力地让新手变得友好,但有些概念很难理解,这是真的(很抱歉,我不能让您更容易地使用ES7。如果您尝试将ES7与Babel结合使用,您可能会发现异步编程对初学者更为友好:以防将来有人偶然发现此代码。@nlawson的代码有效,只是缺少了一个
关闭
。所有(
function call。以下是为方便您而编写的代码:
db.allDocs().then(函数(result){return Promise.all(result.rows.map(函数(row){return db.remove(row.id,row.value.rev););})。然后(…
reset()