Rethinkdb удаление данных из документов

Я пытаюсь удалить некоторые части данных из документов с заданной довольно простой структурой, которая будет намного глубже и тяжелее, чем в этом проекте:

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

Я знаю, что нет способа обновления / удаления разделов из вложенных частей, кроме замены всего дерева обновленным деревом.

Например, если я хочу удалить ключ 1 из данных документа, мне нужно обновить раздел данных документа, скопировав его, где ключ 1 не содержится

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

Есть ли какой-либо eaiser способ удаления части из корня поля, подобного имени документа, без обновления всего документа копией самого себя, которая не содержит ключ и значение имени? Нужно ли мне глубоко копировать и фильтровать документ каждый раз, когда мне нужно удалить некоторые части данных?

1 ответ

Решение

Ниже приведен запрос, который удаляет ключ из корня документа:

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 команда, вам не нужно ничего делать, чтобы воспользоваться этими оптимизациями (кроме обновления сервера).

Надеюсь это поможет.

Другие вопросы по тегам