У меня есть приложение nodejs, в котором я подключаюсь к своему CouchDB, используя nano
со следующим скриптом:
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» каждый раз, когда сервер (повторно) запускается, и просто молча терпит неудачу, если база данных уже существует.
Мне очень нравится эта идея, потому что таким образом я фактически поддерживаю базу данных на уровне приложения и мне не нужно создавать базы данных вручную, когда я решаю добавить новую базу данных.
Сделав еще один шаг в этом подходе, я также попытался поддерживать свою проектную документацию на уровне приложения.
...
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
}
Очевидно, что это вставит проектный документ только в том случае, если он не существует. Но что, если я обновил свой проектный документ и хочу его обновить?
Я старался:
foo.get("_design/foo", (err, doc) => {
if(err)
return foo.insert(design);
design._rev = doc._rev
foo.insert(design);
})
Теперь проблема заключается в том, что проектный документ обновляется каждый раз при перезапуске сервера (например, он получает новый _rev при каждом перезапуске).
Теперь ... мой вопрос (ы) :)
1: Это плохой подход для начальной загрузки моего CouchDB с базами данных и проектами? Должен ли я рассматривать некоторые шаги миграции как часть моего процесса развертывания?
2: Является ли проблемой то, что мой проектный документ получает много _rev, в основном при каждом развертывании и перезапуске сервера? Даже если сам документ не изменился? И если да, то есть ли способ обновить документ, только если он изменился? (Я думал вручную установить _rev какое-то значение в моем приложении, но очень не уверен, что это будет хорошей идеей).