复制完成后如何将文档从一个数据库复制到另一个数据库并删除原始数据库上的文档

问题描述 投票:2回答:1

问题

我有一个数据库的记录recordingsDB,该数据库是从使用pouchDB的客户端应用程序发送的。每个记录都是它自己的文档。例如

{
  "_id": "2019-10-20T04:51:22.744Z",
  "_rev": "1-53e73be51ea76f96e3cfde2de1502439",
  "locale": "en",
  "_attachments": {
    "recordings.webm": {
      "content_type": "audio/webm; codecs=opus",
    ...
    }
  }
}

客户端应用程序只有一个用户clientUser(因此访问该网站的任何人都将成为clientUser)。客户用户因此可以写入recordingsDB,但也可以从recordingsDB读取,这是不希望的,因为他们可以从recordingsDB读取任何记录。

[我走了“只写”数据库的道路,遇到了2011年的this答案。我想知道如何实现它。

想法

所以我认为如果recordingsDB将所有记录复制到masterRecordingsDB,而clientUser不再是成员,那将是可行的。将recordingsDB中的每个文档复制到masterRecordingsDB后,将被删除。

设置

我已经配置了一个复制器,用于将内容从recordingsDB复制到masterRecordingsDB。

{
  "_id": "recordings_to_master_recordings",
  "_rev": "3-a6fa84dd89c2ec037353c17f65b4c765",
  "continuous": true,
  "source": {
    "url": "http://localhost:5984/recordings",
    "headers": {
      "Authorization": "Basic YWRtaW46cGFzc3dvcmQ="
    }
  },
  "target": {
    "url": "http://localhost:5984/master_recordings",
    "headers": {
      "Authorization": "Basic YWRtaW46cGFzc3dvcmQ="
    }
  },
  "user_ctx": {
    "name": "admin",
    "roles": [
      "_admin"
    ]
  },
  "owner": "admin"
}

每次成功复制后如何删除recordingsDB中的项目?

database couchdb pouchdb couchdb-2.0
1个回答
0
投票

我可以考虑两种方法来解决您的问题。

[通常,在CouchDB中,文档删除有点用词不当。当文档被删除时,由于CouchDB的仅追加性质,将创建给定文档的新修订版,仅由其ID,修订版和为真的字段_deleted组成。这种“逻辑删除”被称为允许删除在所有数据库之间复制。但是,该逻辑删除仍保留在数据库中并占用(尽管很小)空间。您可以自己实现此功能,只需创建看起来像{"_id": "0", "_rev": "1-62657917", "_deleted": true}的文档修订版。请注意,带有已删除标志的文档将不再在请求中返回。

删除的第二个选项是purge。这将从数据库中永久删除对给定文档的所有引用。这不是在ouchDB中删除的标准格式,有关如何格式化清除请求的信息在下面链接。

更多信息:

CouchDB Docs on Deletion

CouchDB Docs on Purge

最后是a helpful article about deletion in CouchDB

© www.soinside.com 2019 - 2024. All rights reserved.