我是pouchdb的新手,不太理解它的API。
我想知道用JavaScript代码删除所有文档的最佳方法是什么。我尝试了许多方法,但似乎都不起作用。
我是否需要在allDocs方法中使用某些选项,例如:
db.allDocs({include_docs: true, deleted: true})
我是pouchdb的新手,不太理解它的API。
我想知道用JavaScript代码删除所有文档的最佳方法是什么。我尝试了许多方法,但似乎都不起作用。
我是否需要在allDocs方法中使用某些选项,例如:
db.allDocs({include_docs: true, deleted: true})
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!
});
```
根据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);
});
使用 destroy()
var db = new PouchDB('mydb');
var reset = function() {
db.destroy().then(function() {
db = new PouchDB('mydb');
});
};
reset()
如果 Promise 不可用,您可以使用回调函数及计数器来通知所有行已被删除。
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);
});
}
}
Promise.all()
而不是 for 循环 - 否则只会删除第一个。我强烈推荐观看这个指南中的视频:http://pouchdb.com/guides/async-code.html - nlawson.all(
函数调用。以下是方便您使用的代码:db.allDocs()。then(function(result){return Promise.all(result.rows.map(function(row){return db.remove(row.id,row.value.rev);}); }).then(…
- Uzbekjon