PouchDB更新元素

时间:2016-03-11 17:37:53

标签: angularjs put pouchdb

我昨天开始使用PouchDB进行开发,我遇到了一些问题。如果我尝试更新项目,而不是更新现有项目,则会创建新项目。

我的代码就是这个

服务

.service('LocalDB', function($q){
     var db = null;

     this.initDB = function(){
         db = new PouchDB('tutorial', {adapter: 'websql'});
     }

     this.addObject = function(object){
         return $q.when(db.put(object));
     }

     this.updateObject = function(object, params){
         params._id = object._id;
         params._rev = object._rev;

         return $q.when(db.put(params));
     }
})

控制器代码

.controller('MainCtrl', function ($scope, LocalDB, LoginService){
       //LoginService.user have many parameters
      function initDB(){
         LocalDB.initDB();
      }
      initDB();

      $scope.addObject = function(){
          LocalDB.addObject(LoginService.user).then(function(usr){
                            LoginService.user._id = usr.id;
                            LoginService.user._rev = usr.rev;
                        },
                        function(error){ console.log(error)});
      }

      $scope.updateObject = function(){ 
           LocalDB.updateObject(LoginService.user, { following: "new" }).then(function(success){});
      }

});

此时在websql表中我有两个具有相同id但不同_rev的对象。 第一个对象包含用户数据,第二个对象具有以下名称。如何更新第一个而不创建另一个?

1 个答案:

答案 0 :(得分:0)

您可能需要首先获取带有id的文档以检索修订ID,然后您可以使用该ID来放置文档。

return db.get(doc._id)                             // get document with id
    .then(function(origDoc) {
        doc._rev = origDoc._rev;                   // get original revision
        return db.put(doc,doc._id,doc._rev)        // put using id and revision
           .then(function() {
               console.log("updated: " + doc._id);
            })
            .catch(function(e){
               console.log(e);
            });`