>问题
我有一个记录数据库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 年遇到了这个答案。我想知道如何实现它。
想法
因此,我相信如果我的recordingsDB
将所有录音复制到clientUser
不再是成员的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"
}
如何在每次成功复制后删除录制数据库中的项目?
我能想到两种方法来解决你的问题。
通常,在CouchDB中,文档删除有点用词不当。删除文档时,由于 CouchDB 的仅追加性质,将创建给定文档的新修订版,仅包含其 ID、修订版和字段_deleted
true。这个所谓的"逻辑删除"允许在所有数据库中复制删除。但是,逻辑删除仍保留在数据库中并占用(尽管非常小(空间。您可以自己实现这一点,只需创建看起来像{"_id": "0", "_rev": "1-62657917", "_deleted": true}
的文档修订版即可。请务必注意,带有已删除标志的文档将不再在请求中返回。
第二个删除选项是purge
。这将从数据库中永久删除对给定文档的所有引用。这不是 couchDB 中删除的标准形式,有关如何格式化清除请求的信息链接如下。
更多信息:
关于删除的 CouchDB 文档
关于清除的 CouchDB 文档
最后,一篇关于在 CouchDB 中删除的有用文章