【发布时间】:2016-07-14 22:16:33
【问题描述】:
我有一个 nodejs 应用程序,我使用 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”,如果数据库已经存在,则会静默失败。
我非常喜欢这个想法,因为这样我实际上是在应用程序级别维护数据库,并且在我决定添加新数据库时不必手动创建数据库。
进一步采用这种方法,我还尝试从应用程序级别维护我的设计文档。
...
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:我的设计文档获得许多 _revs,基本上是每次部署和服务器重新启动时都会出现问题吗?即使文件本身没有改变?如果是这样,有没有办法只在文档更改时才更新文档? (我想在我的应用程序中手动将 _rev 设置为某个值,但我不确定这是否是个好主意)。
【问题讨论】:
标签: database deployment couchdb seeding couchdb-nano