2015-04-26 21 views
13

Tôi mới trong pouchdb và tôi không thể hiểu được API.pouchdb xóa allDocs javascript

Tôi muốn biết cách tốt nhất để xóa tất cả tài liệu bằng mã javascript là gì. Tôi thử nhiều thứ nhưng không có gì seams để làm việc.

Tôi có phải sử dụng một số tùy chọn trong phương pháp allDocs như:

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

Trả lời

19

Xin lỗi API là rất khó hiểu! Nếu bạn có thể cho chúng tôi biết cách cải thiện nó, điều đó sẽ hữu ích. :)

Bạn có thể làm db.destroy(), mà hoàn toàn xóa cơ sở dữ liệu nhưng không không tái tạo xóa, hoặc bạn có thể cá nhân remove() tất cả các tài liệu:

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

`` `

+0

Liệu các công việc từ Promise trên Chrome. Tôi không thể làm cho nó hoạt động được. – K20

+0

Liệu việc mã này: db.allDocs() .. sau đó (function (response) {var doc; cho (doc trong response.rows) { trở db.remove (doc); } }) ; – K20

+0

Tôi hỏi vì tôi vẫn có thể xem các tài liệu – K20

0

Nếu lời hứa không có sẵn, bạn có thể sử dụng gọi lại và bộ đếm nếu bạn quan tâm để được thông báo rằng tất cả các hàng đã bị xóa.

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

Nó sẽ là dễ dàng nếu bạn sử dụng liên kết package.The pouchdb-erase NPM cho thấy làm thế nào để sử dụng nó trong nodejs, tuy nhiên tôi đã sử dụng nó trong góc 2 và nó hoạt động như một charm.Here là một số mã của tôi .

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

Dựa trên lời nlawson của bạn cũng có thể sử dụng bulkDocs, vì vậy bạn không cần phải chạy một hoạt động Pouch cho mỗi tài liệu:

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