Ошибка обновления документа при динамической вставке представлений в Cloudant CouchDB

Я впервые использую базу данных nosql (cloudant-couchdb), и пока все идет хорошо. Но я застрял с этими двумя проблемами:

  1. Я пытаюсь динамически добавлять представления. Я могу добавить первое представление, но получаю ошибки при попытке вставить дополнительные представления с указанием Document update conflict. Как это может быть «обновлением», поскольку я каждый раз вставляю новое представление и не обновляю его?

  2. Можно ли передать параметр в функцию карты? Что-то вроде - if(doc.name == someVariable)?

Вот мой код ниже:

app.put("/listSections", function(req, res) {
    var module = req.body.name;
    var obj = {};
    obj[module] = { "map": function (doc) {
        if (doc.name == "Developer") {
            //emit something
        }
    }
});
db.insert({views: obj}, 
    '_design/section', function (error, response) {
        if (error) {
            console.log("error: " + error);
        }
        console.log("module: " + module );
    }
);

person Kashif Kai    schedule 25.06.2015    source источник


Ответы (1)


Мой подход был неправильным. Я только что обнаружил, что создание нескольких представлений - плохая практика. Поэтому я создал одно (общее) представление и передал запросы в качестве параметров, которые отвечают на мой второй вопрос (как передавать динамические параметры). Вот что я сделал:

app.get("/listSections", function(req, res) {
    var moduleId = req.query.id;
    db.view('section','getSections', { key: moduleId }, function(err, body)
   {
       //store values
   }
}

Здесь я динамически передаю moduleId моей функции карты, которая устанавливает ключ как moduleId. Кроме того, я обнаружил, что эта ссылка очень полезна для запросов CouchDB — http://sitr.us/2009/06/30/database-queries-the-couchdb-way.html

person Kashif Kai    schedule 26.06.2015