Ошибка обновления документа при динамической вставке представлений в 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 );
    }
);

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

Другие вопросы по тегам