我使用Pouchdb从用户数据创建数据库,我想用修改过的对象更新文档。例如,我有这个初始对象:
var doc = {
"_id": "test",
"trial": 0,
"results": [11, 22, 33]
};
然后我修改它:
doc.results[doc.results.length] = 44;
我想用新的替换旧的doc。我尝试了这些步骤:
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包含在doc:
中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);
});
但它没有用。
答案 0 :(得分:3)
您的代码应为:
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);
});
答案 1 :(得分:1)
看起来像是一个范围问题。
您为修改过的文档(在外部/全局范围内)使用了相同的对象名称“ doc ”,并在get / put promise块(也有本地范围)之外修改了它' doc '对象优先于您修改过的doc对象)。
即。您正在获取旧文档然后直接将其丢回...因此它似乎没有改变。
使其有效:
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);
});
答案 2 :(得分:0)
根据您的代码,我怀疑您没有在文档或put调用中包含_rev。如果我没记错的话,PouchDB的工作方式与CouchDB类似,在成功更新文档之前需要修订版号。