Команда 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, вы можете удалять элементы с конца массива. -2 — это последний элемент в массиве, -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{ |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/ruby/delete_at/