upsert для фильтров
Сигнатура
> upsert {flags} (field) (replacement value)
Параметры
-
field: Имя столбца для обновления или вставки. -
replacement value: Новое значение для ячейки (ячеек) или замыкание для создания значения.
Типы входных и выходных данных:
| input | output |
|---|---|
| record | record |
| table | table |
| list<any> | list<any> |
Примеры
Обновление значения записи.
> {'name': 'nu', 'stars': 5} | upsert name 'Nushell'
╭───────┬─────────╮
│ name │ Nushell │
│ stars │ 5 │
╰───────┴─────────╯Вставка новой записи в запись.
> {'name': 'nu', 'stars': 5} | upsert language 'Rust'
╭──────────┬──────╮
│ name │ nu │
│ stars │ 5 │
│ language │ Rust │
╰──────────┴──────╯Обновление каждой строки таблицы.
> [[name lang]; [Nushell ''] [Reedline '']] | upsert lang 'Rust' ╭───┬──────────┬──────╮ │ # │ name │ lang │ ├───┼──────────┼──────┤ │ 0 │ Nushell │ Rust │ │ 1 │ Reedline │ Rust │ ╰───┴──────────┴──────╯
Вставка нового столбца со значениями, вычисленными на основе других столбцов.
> [[foo]; [7] [8] [9]] | upsert bar {|row| $row.foo * 2 }
╭───┬─────┬─────╮
│ # │ foo │ bar │
├───┼─────┼─────┤
│ 0 │ 7 │ 14 │
│ 1 │ 8 │ 16 │
│ 2 │ 9 │ 18 │
╰───┴─────┴─────╯Замена значений null в столбце значением по умолчанию.
> [[foo]; [2] [null] [4]] | upsert foo { default 0 }
╭───┬─────╮
│ # │ foo │
├───┼─────┤
│ 0 │ 2 │
│ 1 │ 0 │
│ 2 │ 4 │
╰───┴─────╯Обновление значения в списке по индексу.
> [1 2 3] | upsert 0 2 ╭───┬───╮ │ 0 │ 2 │ │ 1 │ 2 │ │ 2 │ 3 │ ╰───┴───╯
Вставка нового значения в конец списка.
> [1 2 3] | upsert 3 4 ╭───┬───╮ │ 0 │ 1 │ │ 1 │ 2 │ │ 2 │ 3 │ │ 3 │ 4 │ ╰───┴───╯
Добавление значения по вложенному пути с созданием новых значений при необходимости.
> [{} {a: [{}]}] | upsert a.0.b "value"
╭───┬───────────────────────────╮
│ # │ a │
├───┼───────────────────────────┤
│ 0 │ ╭───┬───────╮ │
│ │ │ b │ value │ │
│ │ ╰───┴───────╯ │
│ 1 │ ╭───┬───────────────────╮ │
│ │ │ 0 │ {record 0 fields} │ │
│ │ ╰───┴───────────────────╯ │
╰───┴───────────────────────────╯
Примечания
При обновлении или вставке столбца замыкание будет выполняться для каждой строки, а текущая строка будет передаваться в качестве первого аргумента. Обращение к $in внутри замыкания вернёт значение столбца для текущей строки или null, если столбец не существует.
При обновлении по определённому индексу замыкание будет выполняться только один раз. И первым аргументом замыкания, и значением $in будет текущее значение по этому индексу. Если команда вставляет значение в конец списка или таблицы, оба этих значения будут равны null.
Copyright © 2019–2026 The Nushell Project DevelopersLicensed under the MIT License.
https://www.nushell.sh/commands/docs/upsert.html