我使用Pouchdb从用户数据创建数据库,并希望用修改过的对象更新文档。例如,我有一个初始对象:
var doc = {
"_id": "test",
"trial": 0,
"results": [11, 22, 33]
};然后我修改它:
doc.results[doc.results.length] = 44;我想用新的代替旧的医生。我试过以下步骤:
1/初始化PouchDB和文档
var db = new PouchDB('test');
var doc = {
"_id": "test",
"trial": 0,
"results": [11, 22, 33]
};2/将初始文档放在数据库中
db.put(doc);3/修改文档
doc.results[doc.results.length] = 44;4/尝试用新的更新数据库
db.get('test').then(function(doc) {
return db.put(doc);
}).then(function () {
return db.get('test');
}).then(function (doc) {
console.log(doc);
});但是数据库中的文档没有被修改。
如何使用修改后的对象更新文档?
更新:
即使使用_rev,我也无法使更新工作。正如mauritslamers所建议的,我试图在文档中包括_rev:
var db = new PouchDB('test');
var doc = {
"_id": "test",
"_rev": 0,
"trial": 0,
"results": [11, 22, 33]
};并在put语句中使用以下内容:
db.get('test').then(function(doc) {
return db.put(doc, doc._rev);
}).then(function () {
return db.get('test');
}).then(function (doc) {
console.log(doc);
});但不起作用。
发布于 2015-04-24 17:14:06
您的代码应该是:
db.get('test').then(function(doc) {
return db.put(doc); // <-- no need to include rev as the second argument
}).then(function () {
return db.get('test');
}).then(function (doc) {
console.log(doc);
});发布于 2015-04-24 13:59:32
根据您的代码,我怀疑您没有将_rev包含在文档中或put调用中。如果我没记错的话,PouchDB就像CouchDB一样工作,并且在成功地更新文档之前需要一个修订号。
发布于 2016-04-07 01:49:36
这看起来是个范围问题。
您对修改后的文档(在外部/全局范围内)使用了相同的对象名称' doc ‘,并在get/put允诺块之外对其进行了修改(该块还有一个本地作用域'doc’对象,该对象优先于您修改的对象)。
也就是说,你得到了你的旧文档,然后把它说清楚了,back...thus,它似乎没有改变。
为了使它发挥作用:
var db = new PouchDB('test');
var doc = {
"_id": "test",
"trial": 0,
"results": [11, 22, 33]
};
db.put(doc); // initial put
db.get('test').then(function(doc) {
doc.results[doc.results.length] = 44; // modify it here instead
return db.put(doc);
}).then(function () {
return db.get('test');
}).then(function (doc) {
console.log(doc);
});https://stackoverflow.com/questions/29847072
复制相似问题