У меня есть nodejs приложение, в котором я подключиться к моей CouchDB, используя nano
со следующим сценарием:CouchDB дизайн обновление док
const { connectionString } = require('../config');
const nano = require('nano')(connectionString);
// creates database or fails silent if exists
nano.db.create('foo');
module.exports = {
foo: nano.db.use('foo')
}
Этот скрипт выполняется на каждом запуске сервера, поэтому он пытается создать базу данных «Foo 'каждый раз, когда сервер (re) запускается и просто терпит неудачу, если база данных уже существует.
Мне нравится эта идея, потому что я фактически поддерживаю базу данных на уровне приложения и не должен создавать базы данных вручную, когда я решу добавить новую базу данных.
Приняв этот подход на один шаг, я также попытался сохранить свои проектные документы с уровня приложений.
...
nano.db.create('foo');
const foo = nano.db.use('foo');
const design = {
_id: "_design/foo",
views: {
by_name: {
map: function(doc) {
emit(doc.name, null);
}
}
}
}
foo.insert(design, (err) => {
if(err)
console.log('design insert failed');
})
module.exports = {
foo
}
Очевидно, что это будет только вставить проект doc, если он не существует. Но что, если я обновляю свой проект doc и хочу его обновить?
Я пробовал:
foo.get("_design/foo", (err, doc) => {
if(err)
return foo.insert(design);
design._rev = doc._rev
foo.insert(design);
})
Сейчас проблема заключается в том, что дизайн документ обновляется каждый раз, когда перезапуск сервера (например он получает новую _rev при каждом перезапуске).
Теперь ... мой вопрос (ы) :)
1: Является ли это плохой подход для самонастройки мой CouchDB с базами данных и конструкций? Должен ли я рассматривать некоторые шаги миграции как часть моего процесса развертывания?
2: Является ли проблема, что мой проект doc получает много _revs, в основном для каждого развертывания и перезапуска сервера? Даже если сам документ не изменился? И если да, существует ли способ обновить документ, если он изменился? (Я думал о том, чтобы вручную установить _rev в какое-то значение в моем приложении, но очень не уверен, что это будет хорошая идея).
Спасибо, Бернхард. Ваше объяснение было действительно полезным. Я принял ваш совет, просто сравнив документы по дизайну, но столкнулся с некоторыми проблемами, сравнивая их с md5 ... Я разместил собственное решение на основе ваших предложений ниже. Не могли бы вы дать свой отзыв? –