Ionic2 Ionic 2和数据库:更新文档时出现错误404或409

Ionic2 Ionic 2和数据库:更新文档时出现错误404或409,ionic2,pouchdb,Ionic2,Pouchdb,我想用PockDB数据库的put方法更新一些文档,但它总是失败,有时会出现404或409错误 我的文档制作如下: { "_id": "1", "id": 1, "type": "area", "translations": { "fr": "Frigo", "en": "Fridge" }, "stats": { "totalProducts": 0, "totalQuantity": 0,

我想用PockDB数据库的put方法更新一些文档,但它总是失败,有时会出现404或409错误

我的文档制作如下:

{
    "_id": "1",
    "id": 1,
    "type": "area",
    "translations": {
      "fr": "Frigo",
      "en": "Fridge"
    },
    "stats": {
      "totalProducts": 0,
      "totalQuantity": 0,
      "stockPrice": 0.00
    },
    "logo": "frigo.png"
}
以及更新的过程:

this._db.get('1', {include_docs: true}).then((doc) => {
    console.log('Original area : ' + JSON.stringify(doc));
    let updateDoc: any = {};
    updateDoc._id = doc._id;
    updateDoc._rev = doc._rev;
    updateDoc.stats.totalProducts = doc.stats.totalProducts++;
    updateDoc.stats.totalQuantity = doc.stats.totalQuantity + product.stock[0].initialQuantity;
    updateDoc.stats.stockPrice = doc.stats.stockPrice + product.stock[0].totalPrice;
    this._db.put(updateDoc).then((response) => {
      console.log('Update success');
    });
  }).catch(function(err){
    console.log('Exception raised : ' + err);
})

我做错了什么?我注意设置了_id和_rev,但不断收到错误代码404或409。

查看上的文档,尤其是上的文档

您不能再次添加具有相同
\u id
\u rev
的不同文档,这将导致409冲突错误(另请参阅)。您必须更改原始对象:

this._db.get('1', {include_docs: true}).then((doc) => {
    console.log('Original area : ' + JSON.stringify(doc));

    doc.stats.totalProducts = doc.stats.totalProducts++;
    doc.stats.totalQuantity = doc.stats.totalQuantity + product.stock[0].initialQuantity;
    doc.stats.stockPrice = doc.stats.stockPrice + product.stock[0].totalPrice;
    this._db.put(doc).then((response) => {
       console.log('Update success');
    });
})


404错误表示您试图获取的文档不存在(不再存在)。在创建文档之前,确保您没有删除您试图获取的文档,也确保您没有尝试获取文档…

好的,我的代码中有一些问题,如果有帮助的话

首先,以这种方式替换数据库的构造函数:

  PouchDB.plugin(cordovaSqlitePlugin);
  this._db = new PouchDB('easystock.db', { adapter: 'cordova-sqlite', location: 'default' });
注意添加:位置:'default',如果不是,则不会在设备上创建数据库

第二个问题,我的PockDB构造函数是在一个特定的方法中调用的,所以当我想更新我的文档时,没有设置_db属性,然后。。。重构我的服务并在服务构造函数中移动数据库实例

最后,应用.get()。然后()如前面回答的那样

Thx 4全部

JL

数据库提供了更新文档的更方便的方法:

db.upsert('docID',function(doc){
    /* Modify "doc" as you wish */
    doc.whatever='new whatever'

    /* return doc after all modifications are done: */
    return doc;
})

谢谢。。。我会这样尝试。。。对其他人来说。。。对于Ionic 2和cordova sqlite,您必须添加到构造函数“位置”:“默认值”: