Команда ReQL: delete_at
Синтаксис команды
array.delete_at(offset [,end_offset]) → array
Описание
Удаляет один или несколько элементов из массива по заданному индексу. Возвращает изменённый массив. (Примечание: delete_at работает с массивами, а не документами; для удаления документов используйте команду delete.)
Если указан только offset, delete_at удаляет элемент по этому индексу. Если указаны offset и end_offset, delete_at удаляет диапазон элементов между offset и end_offset, включая offset, но не включая end_offset.
Если указан end_offset, он не должен быть меньше offset. Оба offset и end_offset должны быть в пределах границ массива (т.е., если массив имеет 10 элементов, offset или end_offset значения 10 или больше недопустимы).
Используя отрицательный offset, вы можете удалять элементы с конца массива. -1 — это последний элемент в массиве, -2 — предпоследний, и так далее. Вы можете указать отрицательный end_offset, хотя, как и с положительным значением, он не будет включаться. Диапазон (2,-1) указывает на третий элемент и до предпоследнего.
Пример: Удаление второго элемента массива.
> r.expr(['a','b','c','d','e','f']).delete_at(1).run(conn)
['a', 'c', 'd', 'e', 'f']
Пример: Удаление второго и третьего элементов массива.
> r.expr(['a','b','c','d','e','f']).delete_at(1,3).run(conn)
['a', 'd', 'e', 'f']
Пример: Удаление предпоследнего элемента массива.
> r.expr(['a','b','c','d','e','f']).delete_at(-2).run(conn)
['a', 'b', 'c', 'd', 'f']
Пример: Удаление комментария на посте.
Пусть есть документ поста, такой как:
{
id: '4cf47834-b6f9-438f-9dec-74087e84eb63',
title: 'Post title',
author: 'Bob',
comments: [
{ author: 'Agatha', text: 'Comment 1' },
{ author: 'Fred', text: 'Comment 2' }
]
}
Второй комментарий можно удалить, используя update и delete_at вместе.
r.table('posts').get('4cf47834-b6f9-438f-9dec-74087e84eb63').update(
lambda post: { 'comments': post['comments'].delete_at(1) }
).run(conn)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/delete_at/