Ошибка обновления документа при динамической вставке представлений в cloudant couchdb
Я впервые использую базу данных nosql (cloudant-couchdb), и пока она идет хорошо. Но я застрял с этими двумя проблемами:
Я пытаюсь динамически добавлять представления. Я могу добавить первое представление, но получаю ошибки при попытке добавить больше представлений
Document update conflict
, Как это будет "обновление", так как я каждый раз вставляю новый вид, а не обновляю его?Можно ли передать параметр в функцию карты? Что-то вроде -
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