Rethinkdb从文档中删除数据

时间:2013-07-24 11:39:24

标签: nosql rethinkdb document-store

我正试图从文档中删除部分数据,结构相当简单,比项目更加深入和重要:

{
    id: "...",
    name: "...",
    phone: "...",
    data: {
        key1: "val1",
        ...
    }
    ...
}

我知道除了用更新的树替换整个树之外,没有办法从嵌套部分更新/删除部分。

例如,如果我想从文档数据中删除key1,我需要更新文档数据部分,其中包含key1未包含的副本

document.update({data: new dict without key1})

是否有任何eaiser方法从类似文档的名称字段的根目录中删除部分 - 而不使用不包含名称键和值的自身副本更新整个文档?每次需要删除部分数据时,是否必须深度复制和过滤文档?

1 个答案:

答案 0 :(得分:6)

以下是从文档根目录中删除密钥的查询:

r.table('foo').get(document_id).replace(r.row.without('key'))

您也可以按如下方式为多个文档执行此操作:

r.table('foo').filter(condition).replace(r.row.without('key'))

从即将发布的1.8版本开始,您还可以按如下方式对嵌套密钥执行此操作:

r.table('foo').get(document_id).replace(r.row.without({data: { key1: true}}))

目前,上述命令基本上将文档替换为自身的副本,而无需服务器上的相关密钥。在接下来的几个版本中,这将进行大量优化,以最大限度地减少内存中的文档复制(因此,虽然看起来您在没有密钥的情况下用自己的副本替换文档,但操作将在没有任何复制的情况下破坏性地执行) 。未来版本可能会更新底层结构,以便不必将完整文档写入磁盘。

如果您使用without命令,则无需采取任何措施来利用这些优化(除了升级服务器之外)。

希望这有帮助。