2015-04-26 2 views
13

Я новичок в pouchdb, и я не понимаю API.pouchdb delete allDocs javascript

Я хочу знать, что является лучшим способом удалить все документы с помощью javascript-кода. Я пробую много чего, но ничего не работает.

Должен ли я использовать несколько вариантов в методе allDocs как:

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

ответ

19

Огорченно 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! 
}); 

`` `

+0

означает слово работы Promise на Chrome. Я не могу заставить его работать. – K20

+0

ли этот код работает: db.allDocs() .. то (функция (ответ) { вар Doc; для (док в response.rows) { возвращение db.remove (док); } }) ; – K20

+0

Я спрашиваю его, потому что я все еще вижу документы. – K20

0

Если обещания недоступны, вы можете использовать обратные вызовы и счетчик, если вы хотите получить уведомление о том, что все строки были удалены.

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

Было бы легко, если вы использовали package.The ссылку pouchdb-erase НПМ показывает, как использовать его в nodejs, однако я использовал его в угловом 2 и он работает как charm.Here некоторые из моего кода ,

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 вы также можете использовать 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); 
}); 
Смежные вопросы