我的一台节点服务器的工作是检查FTP上的XML文件,如果找到它,则将其转换为JSON。现在,它的工作是擦除一个ouchdb数据库,并使在XML文件中找到的所有新数据替换以前的内容。
现在,由于我不希望数据库在任何时候都为空(或不存在),因此我并没有简单地销毁它,而是使用新的数据集重新创建了它。我的节点服务器已经从数据库复制到本地pouchdb,将其擦除(软删除),然后将所有新数据放入其中,然后复制到ouchdb数据库。
似乎完全不需要下载,而应该有一种方法可以进行硬删除。有什么方法可以用新的对象集简单地替换当前CouchDB数据库中的所有对象,而我的节点服务器将复制该对象集?
谢谢你的帮助
最佳答案
CouchDB将文档修订历史记录保存在树中,因此用较新的版本替换文档(例如_id为'x'的文档)需要您知道现有修订的_id / _rev对或能够对其进行更新。 。
因此,如果您需要更新文档“ x”,则必须
// fetch the document first
curl -X GET http://localhost:5984/mydb/x
{ "_id": "x", "_rev": "45-123", "name": "fred"}
// to be able to update it
curl -X PUT -d'{ "_id": "x", "_rev": "45-123", "name": "Fred Smith"}' http://localhost:5984/mydb/x
{ "ok": "true", "_id": "x", "_rev": "46-456"}
您可以重写作业以对每个已更改的文档执行此GET / PUT操作。
如果您需要在导入新数据之前先擦除数据,则只需创建一个新数据库,例如“ mydb2017-09-22”,将数据导入其中,并告诉正在使用该数据的应用程序将“ mydb2017-09-22”用作事实的来源。然后,您可以安全地删除以前的规范数据库。这样可以避免当前解决方案中的复制步骤。
当前的CouchDB不支持清除,因为它会使复制数据的实现混乱。压缩用于删除较旧的,不需要的文档修订版本的主体,以节省空间。
由于不了解有关您的问题的所有信息,我建议您查看“每个导入一个数据库”解决方案,因为它使您可以在导入完成后简单地在数据集之间切换,并通过删除旧数据库对其进行清理。