【问题标题】:pouchdb delete allDocs javascriptpouchdb 删除 allDocs javascript
【发布时间】:2015-07-04 20:03:24
【问题描述】:

我是 pouchdb 的新手,无法理解 API。

我想知道用 javascript 代码删除所有文档的最佳方法是什么。我尝试了很多事情,但没有任何接缝可以工作。

我是否必须在 allDocs 方法中使用一些选项,例如:

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

【问题讨论】:

    标签: javascript pouchdb


    【解决方案1】:

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

    ```

    【讨论】:

    • 这段代码是否有效:db.allDocs()..then(function (response) { var doc; for(doc in response.rows) { return db.remove(doc); } }) ;
    • 你需要使用Promise.all()而不是for循环——否则你只会删除第一个。我强烈推荐本指南中的视频:pouchdb.com/guides/async-code.html
    • 抱歉回复晚了。关于如何提高对网站的理解,我不太清楚,但我认为你高估了用户的知识。我真的是 pouchdb 的新手,在阅读了您网站上的内容后,我花了很多时间进行研究。此外,这些样本是针对非常具体的情况制作的,当我想做一些不同的事情时,我完全迷失了。这可能是一种印象,但我认为所有的词典都没有描述。
    • 我非常努力地让 PouchDB 对新手友好,但有些概念很难,这是真的。 :( 对不起,我不能让你更容易。如果你尝试使用 ES7 和 Babel,你可能会发现异步编程对初学者更友好:pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.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( ...
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您可以销毁并重新创建它

        使用 destroy()

        var db = new PouchDB('mydb');
        
        var reset = function() {
          db.destroy().then(function() {
            db = new PouchDB('mydb');
          });
        };
        

        重置

        reset()
        

        【讨论】:

          【解决方案5】:

          如果你使用 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);
              });
            }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-24
            相关资源
            最近更新 更多