首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PouchDB:用修改后的对象更新文档

PouchDB:用修改后的对象更新文档
EN

Stack Overflow用户
提问于 2015-04-24 12:03:47
回答 3查看 4.5K关注 0票数 4

我使用Pouchdb从用户数据创建数据库,并希望用修改过的对象更新文档。例如,我有一个初始对象:

代码语言:javascript
复制
var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

然后我修改它:

代码语言:javascript
复制
doc.results[doc.results.length] = 44;

我想用新的代替旧的医生。我试过以下步骤:

1/初始化PouchDB和文档

代码语言:javascript
复制
var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

2/将初始文档放在数据库

代码语言:javascript
复制
db.put(doc);

3/修改文档

代码语言:javascript
复制
doc.results[doc.results.length] = 44;

4/尝试用新的更新数据库

代码语言:javascript
复制
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:

代码语言:javascript
复制
var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "_rev": 0,
    "trial": 0,
    "results": [11, 22, 33]
};

并在put语句中使用以下内容:

代码语言:javascript
复制
db.get('test').then(function(doc) {
      return db.put(doc, doc._rev);
    }).then(function () {
      return db.get('test');
    }).then(function (doc) {
      console.log(doc);
    });

但不起作用。

EN

回答 3

Stack Overflow用户

发布于 2015-04-24 17:14:06

您的代码应该是:

代码语言:javascript
复制
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);
    });
票数 4
EN

Stack Overflow用户

发布于 2015-04-24 13:59:32

根据您的代码,我怀疑您没有将_rev包含在文档中或put调用中。如果我没记错的话,PouchDB就像CouchDB一样工作,并且在成功地更新文档之前需要一个修订号。

票数 1
EN

Stack Overflow用户

发布于 2016-04-07 01:49:36

这看起来是个范围问题。

您对修改后的文档(在外部/全局范围内)使用了相同的对象名称' doc ‘,并在get/put允诺块之外对其进行了修改(该块还有一个本地作用域'doc’对象,该对象优先于您修改的对象)。

也就是说,你得到了你的旧文档,然后把它说清楚了,back...thus,它似乎没有改变。

为了使它发挥作用:

代码语言:javascript
复制
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);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29847072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档