Обновите поле документа в нано-модуле nodejs для couchdb - PullRequest
2 голосов
/ 24 января 2012

Скажем, что с помощью nano на node.js открыт сеанс couchdb

var dbserv = require('nano')('http://localhost:5984');

На сервере couchdb dbserv может получить доступ база данных users с пользователями, имеющими поле groups это массив.

Если бы я хотел обновить groups для пользователя jim в users, как бы я сделал это без замены всего документа?

Ответы [ 2 ]

3 голосов
/ 14 ноября 2013

Нашел способ делать обновления без всяких _дизайнных потребностей и тому подобного.Проблема с Nano CouchDB заключается в том, что на вставке нет места для отправки правильного _rev, необходимого для обновления.Во всяком случае, есть работа вокруг.Что нужно сделать, это получить значение _rev из _id, который вы хотите обновить.Таким образом, вы используете Nano db.get в качестве большой функции, получите значение _rev и обновите свой документ.Вот пример кода:

 users.get('document_name', function(err, doc) {
        updaterev = doc._rev;
        users.insert({title:'here_ya_go',_rev:updaterev},'document_name', function(err, body , header) {
            if (!err)
            {
                console.log(body);
                res.send('update website succeed');
            }
            else
            {
                console.log(err.error);
            }
        });
  });

Когда функции db.insert находятся внутри функции db.get, это дает нам возможность захватить _rev и обновить документ.

Я знаю, я, вероятно, не изобрел это, но важно иметь этот фрагмент кода, чтобы захватить и пойти.Удачи.

3 голосов
/ 25 января 2012

CouchDB

Чтобы создать обработчик обновлений, напишите проектный документ:

{
  "_id": "_design/yourapp",
  "updates": {
    "foo": "function(doc, req) {
      doc.groups.push(req.query.bar); // or do whatever you like with it
      return [doc, 'done'];
    }"
  }
}

и поместите его в свою базу данных с идентификатором _design/yourapp, а затем ПОЛУЧИТЕ так:

http://localhost:5984/users/_design/yourapp/_update/foo/jim?bar=baz

nanocouch

var dbserv = require('nano')('http://localhost:5984');
var db = dbserv.use('users');

var designdoc = {/* The above design document */};

db.insert(designdoc);

db.get('_design/yourapp/_update/foo/jim', {bar: 'baz'});

Обратите внимание, что вам нужно вставить проектный документ только один раз, вы можете даже сделать это вручную, используя curl, затем для обновления ваших документов просто сделайте GETзапрос, как объяснено выше.

Отказ от ответственности: не проверял, и я никогда не использовал nano раньше, но это должно быть в соответствии с тем, что вы должны сделать.

...