我的一台节点服务器的工作是检查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不支持清除,因为它会使复制数据的实现混乱。压缩用于删除较旧的,不需要的文档修订版本的主体,以节省空间。

由于不了解有关您的问题的所有信息,我建议您查看“每个导入一个数据库”解决方案,因为它使您可以在导入完成后简单地在数据集之间切换,并通过删除旧数据库对其进行清理。

10-04 16:11
查看更多