我有一个数据库的记录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中的项目?
我可以考虑两种方法来解决您的问题。
[通常,在CouchDB中,文档删除有点用词不当。当文档被删除时,由于CouchDB的仅追加性质,将创建给定文档的新修订版,仅由其ID,修订版和为真的字段_deleted
组成。这种“逻辑删除”被称为允许删除在所有数据库之间复制。但是,该逻辑删除仍保留在数据库中并占用(尽管很小)空间。您可以自己实现此功能,只需创建看起来像{"_id": "0", "_rev": "1-62657917", "_deleted": true}
的文档修订版。请注意,带有已删除标志的文档将不再在请求中返回。
删除的第二个选项是purge
。这将从数据库中永久删除对给定文档的所有引用。这不是在ouchDB中删除的标准格式,有关如何格式化清除请求的信息在下面链接。
更多信息: