最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - PouchDB: update document with modified object - Stack Overflow

programmeradmin0浏览0评论

I use Pouchdb to create a database from user data and I would like to update a document with a modified object. For example, I have this initial object:

var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

Then I modify it:

doc.results[doc.results.length] = 44;

I would like to replace the old doc with the new. I tried these steps:

1/ Initialize PouchDB and the document

var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

2/ Put the initial document in the database

db.put(doc);

3/ Modify the document

doc.results[doc.results.length] = 44;

4/ Try to update the database with the new doc

db.get('test').then(function(doc) {
      return db.put(doc);
    }).then(function () {
      return db.get('test');
    }).then(function (doc) {
      console.log(doc);
    });

But the document in the database is not modified.

How can I update the doc with the modified object?

UPDATE:

I can't make the update work even with the _rev. As suggested by mauritslamers, I tried to include the _rev in the doc:

var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "_rev": 0,
    "trial": 0,
    "results": [11, 22, 33]
};

And in the put statement with the following:

db.get('test').then(function(doc) {
      return db.put(doc, doc._rev);
    }).then(function () {
      return db.get('test');
    }).then(function (doc) {
      console.log(doc);
    });

But it doesn't work.

I use Pouchdb to create a database from user data and I would like to update a document with a modified object. For example, I have this initial object:

var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

Then I modify it:

doc.results[doc.results.length] = 44;

I would like to replace the old doc with the new. I tried these steps:

1/ Initialize PouchDB and the document

var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "trial": 0,
    "results": [11, 22, 33]
};

2/ Put the initial document in the database

db.put(doc);

3/ Modify the document

doc.results[doc.results.length] = 44;

4/ Try to update the database with the new doc

db.get('test').then(function(doc) {
      return db.put(doc);
    }).then(function () {
      return db.get('test');
    }).then(function (doc) {
      console.log(doc);
    });

But the document in the database is not modified.

How can I update the doc with the modified object?

UPDATE:

I can't make the update work even with the _rev. As suggested by mauritslamers, I tried to include the _rev in the doc:

var db = new PouchDB('test');
var doc = {
    "_id": "test",
    "_rev": 0,
    "trial": 0,
    "results": [11, 22, 33]
};

And in the put statement with the following:

db.get('test').then(function(doc) {
      return db.put(doc, doc._rev);
    }).then(function () {
      return db.get('test');
    }).then(function (doc) {
      console.log(doc);
    });

But it doesn't work.

Share Improve this question edited Apr 24, 2015 at 15:11 hadrienj asked Apr 24, 2015 at 12:03 hadrienjhadrienj 2,0133 gold badges28 silver badges36 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 4

Your code should be:

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);
    });

Just based on your code I would suspect that you didn't include the _rev in the doc, or in the put call. If I remember correctly, PouchDB works like CouchDB and will require a revision number before successfully updating a document.

It looks like a scope issue.

You've used the same object name 'doc' for your modified document (in the outer/global scope) and modified it outside your get/put promise block (which also had a local scope 'doc' object that took precedence over your modified doc object).

i.e. You were GETTING your old document and then PUTTING it straight back...thus it didn't appear to change.

To make it work:

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);
});
发布评论

评论列表(0)

  1. 暂无评论