Ionic2 Ionic 2和数据库:更新文档时出现错误404或409
我想用PockDB数据库的put方法更新一些文档,但它总是失败,有时会出现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,
{
"_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,您必须添加到构造函数“位置”:“默认值”: