2015-04-26 15 views
13

Jestem nowy w pouchdb i nie mogę zrozumieć API.pouchdb usunąć allDocs javascript

Chcę wiedzieć, jaki jest najlepszy sposób na usunięcie wszystkich dokumentów z kodem javascript. Próbuję wielu rzeczy, ale nic nie działa.

Czy muszę korzystać z niektórych opcji w metodzie allDocs jak:

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

Odpowiedz

19

Niestety API jest tak skomplikowane! Jeśli możesz nam powiedzieć, jak to poprawić, byłoby to pomocne. :)

Można też zrobić db.destroy(), która całkowicie usuwa zawartość bazy danych, ale robi nie replikować delecji lub możesz indywidualnie remove() wszystkie dokumenty:

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

oznacza słowo pracę obietnicą Chrome. Nie mogę tego zrobić. – K20

+0

to działa kod: db.allDocs() .. następnie (funkcja (odpowiedź) { var RWO, dla (DOC response.rows) { powrotu db.remove (DOC), } }) ; – K20

+0

Pytam jego, ponieważ wciąż widzę dokumenty – K20

0

Jeśli obietnice nie są dostępne, możesz użyć wywołań zwrotnych i licznika, jeśli chcesz otrzymać powiadomienie, że wszystkie wiersze zostały usunięte.

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

Byłoby proste, jeśli użył pouchdb-erase npm odnośnik package.The pokazuje, jak używać go w nodejs jednak użyłem go w kątowym 2 i działa jak charm.Here to niektóre z moich kodu .

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

podstawie Odpowiedź nlawson może również wykorzystać bulkDocs, dzięki czemu nie trzeba uruchamiać operację Pouch dla każdego dokumentu:

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