2015-04-26 15 views
13

Ben pouchdb'de yeniyim ve API'yi anlayamıyorum.pouchdb delete allDocs javascript

Tüm belgeleri bir javascript koduyla silmenin en iyi yolunun ne olduğunu bilmek istiyorum. Birçok şey deniyorum ama işe yaramayacak hiçbir şey yok.

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

cevap

19

Maalesef API çok kafa karıştırıcı:

ben gibi allDocs yönteminde bazı seçenekleri kullanmak zorunda mıyım! Bunu nasıl geliştireceğimizi söylerseniz, bu yararlı olur. :)

tamamen veritabanını siler ama değil silmeleri çoğaltmak veya mümkünse tek tek remove() tüm belgeler yapar db.destroy(), yapabileceği ya:

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

Chrome'da Promise kelimesi çalışır mı. İş alamıyorum. db.allDocs() .. sonra (fonksiyonu (yanıt) { } ;, response.rows (DOC) { dönüş db.remove (belge) için var doc}): – K20

+0

bu kod çalışıyor mu ; – K20

+0

Onun için soruyorum çünkü hala belgeleri görebiliyorum – K20

0

Söz verilemezse, tüm satırların kaldırıldığını bildirmek için geri aramalar ve bir sayaç kullanabilirsiniz.

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

Eğer pouchdb-erase npm package.The linki kullanılan eğer kolay olurdu, nodejs kullanmak için ancak açısal 2'de kullanmış gösterir ve bir charm.Here kodumu bazıları gibi çalışır .

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

nlawson en Yanıt her belge için bir Kılıfı operasyonu çalıştırmak zorunda kalmamak da, bulkDocs kullanabilirsiniz dayanarak:

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