alt*_*urt 2 nosql document-store rethinkdb
我试图从给定相当简单结构的文档中删除一些数据部分,这将比项目更加深入和重要:
{
id: "...",
name: "...",
phone: "...",
data: {
key1: "val1",
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我知道除了用更新的树替换整个树之外,没有办法更新/删除嵌套部分中的部分.
例如,如果我想从文档数据中删除key1,我需要使用它的副本更新文档数据部分,其中不包含key1
document.update({data: new dict without key1})
Run Code Online (Sandbox Code Playgroud)
是否有任何eaiser方法从类似文档的名称字段的根目录中删除部分 - 而不使用不包含名称键和值的自身副本更新整个文档?每次需要删除部分数据时,是否必须深度复制和过滤文档?
下面是一个从文档根目录中删除密钥的查询:
r.table('foo').get(document_id).replace(r.row.without('key'))
Run Code Online (Sandbox Code Playgroud)
您也可以按如下方式为多个文档执行此操作:
r.table('foo').filter(condition).replace(r.row.without('key'))
Run Code Online (Sandbox Code Playgroud)
从即将发布的1.8版本开始,您还可以对嵌套密钥执行以下操作:
r.table('foo').get(document_id).replace(r.row.without({data: { key1: true}}))
Run Code Online (Sandbox Code Playgroud)
目前,上述命令基本上用自身的副本替换文档而没有服务器上的相关密钥.在接下来的几个版本中,这将进行大量优化,以最大限度地减少内存中的文档复制(因此,虽然看起来您正在使用自己的副本替换文档而没有密钥,但是操作将在没有任何复制的情况下破坏性地执行) .未来版本可能会更新底层结构,以便不必将完整文档写入磁盘.
如果使用该without命令,则无需执行任何操作即可利用这些优化(除了升级服务器).
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |