index_object:select()
Поиск кортежа или набора кортежей по текущему индексу. Для поиска по первичному индексу в указанном спейсе используйте метод box_space-select.
Параметры:
-
index_object(index_object) — ссылка на объект. -
key(scalar/table) — значение для сопоставления с ключом индекса, который может быть составным. -
options(table/nil) — ни один, любой или все из следующих параметров: -
iterator— тип итератора. По умолчанию используется тип 'EQ'. -
limit— максимальное количество кортежей. -
offset— количество пропускаемых кортежей (используйте этот параметр с осторожностью при сканировании больших наборов данных. -
options.after— кортеж или позиция кортежа (tuple_pos), после которогоselectначинает поиск. Чтобы начать поиск с первого кортежа, передайте этому параметру пустую строку или box.NULL. -
options.fetch_pos– еслиtrue, методselectвозвращает позицию последнего выбранного кортежа в качестве второго значения.
Возвращает
none
Эта функция может возвращать одно или два значения:
- Кортежи, поля которых равны полям переданного ключа. Если количество
переданных полей меньше количества полей в текущем ключе, то
сравниваются только переданные поля, поэтому
select{1,2}соответствует кортежу, первичный ключ которого –{1,2,3}. - (Опционально) Если для
options.fetch_posзадано значениеtrue, возвращает строку в кодировке base64, представляющую позицию последнего выбранного кортежа, в качестве второго значения. Если кортежи не получены, возвращаетnil.
Тип возвращаемого значения
none
- массив кортежей
- строка (опционально)
{#offset-warning}
Используйте параметр offset с осторожностью при сканировании больших
наборов данных, так как он линейно увеличивает количество сканируемых
кортежей и приводит к полному сканированию спейса. Вместо этого можно
использовать параметры after и fetch_pos.
Примеры:
Ниже приведено несколько примеров использования select с различными
параметрами. Чтобы попробовать эти примеры, необходимо выполнить
начальную загрузку базы данных Tarantool, как описано в
Использование операций с данными.
-- Insert test data --box.space.bands:insert { 1, 'Roxette', 1986 }box.space.bands:insert { 2, 'Scorpions', 1965 }box.space.bands:insert { 3, 'Ace of Base', 1987 }box.space.bands:insert { 4, 'The Beatles', 1960 }box.space.bands:insert { 5, 'Pink Floyd', 1965 }box.space.bands:insert { 6, 'The Rolling Stones', 1962 }box.space.bands:insert { 7, 'The Doors', 1965 }box.space.bands:insert { 8, 'Nirvana', 1987 }box.space.bands:insert { 9, 'Led Zeppelin', 1968 }box.space.bands:insert { 10, 'Queen', 1970 }-- Select a tuple by the specified primary key value --select_primary = bands.index.primary:select { 1 }--[[---- - [1, 'Roxette', 1986]...--]]-- Select a tuple by the specified secondary key value --select_secondary = bands.index.band:select { 'The Doors' }--[[---- - [7, 'The Doors', 1965]...--]]-- Select a tuple by the specified multi-part secondary key value --select_multipart = bands.index.year_band:select { 1960, 'The Beatles' }--[[---- - [4, 'The Beatles', 1960]...--]]-- Select tuples by the specified partial key value --select_multipart_partial = bands.index.year_band:select { 1965 }--[[---- - [5, 'Pink Floyd', 1965]- [2, 'Scorpions', 1965]- [7, 'The Doors', 1965]...--]]-- Select maximum 3 tuples by the specified secondary index --select_limit = bands.index.band:select({}, { limit = 3 })--[[---- - [3, 'Ace of Base', 1987]- [9, 'Led Zeppelin', 1968]- [8, 'Nirvana', 1987]...--]]-- Select maximum 3 tuples with the key value greater than 1965 --select_greater = bands.index.year:select({ 1965 }, { iterator = 'GT', limit = 3 })--[[---- - [9, 'Led Zeppelin', 1968]- [10, 'Queen', 1970]- [1, 'Roxette', 1986]...--]]-- Select maximum 3 tuples after the specified tuple --select_after_tuple = bands.index.primary:select({}, { after = { 4, 'The Beatles', 1960 }, limit = 3 })--[[---- - [5, 'Pink Floyd', 1965]- [6, 'The Rolling Stones', 1962]- [7, 'The Doors', 1965]...--]]-- Select first 3 tuples and fetch a last tuple's position --result, position = bands.index.primary:select({}, { limit = 3, fetch_pos = true })-- Then, pass this position as the 'after' parameter --select_after_position = bands.index.primary:select({}, { limit = 3, after = position })--[[---- - [4, 'The Beatles', 1960]- [5, 'Pink Floyd', 1965]- [6, 'The Rolling Stones', 1962]...--]]