Когда нужно обработать большое количество элементов приложения за один запрос, вы можете написать скрипт, используя методы массового добавления элементов или обновления их полей:
Application.batch().save() — массовое добавление элементов приложения;
Application.batch().update() — массовое обновление полей элементов приложения;
Application.batch().delete() — массовое удаление элементов приложения.
Обратите внимание:
за один запрос обрабатывается не более 10000 элементов;
в приложении, в котором выполняются массовые действия, текущему пользователю должны быть выданы права на импорт данных.
Эти ограничения применяются ко всем указанным методам.
Используя Application.batch().save(), вы можете за один запрос:
сохранить новые элементы в базу данных. В этом случае при создании новых элементов в сохраняемых элементах будут установлены идентификаторы, которые после сохранения можно использовать для доступа к созданным элементам;
обновить поля существующих элементов. В этом случае укажите их идентификаторы, чтобы по ним найти нужные элементы, внести в них изменения и сохранить отредактированные элементы в базе данных.
При перечислении создаваемых элементов вы можете использовать в методе:
массив — чтобы создать определённое количество данных;
await Application.batch().save().items(orders).all(); // Тут `orders` — это массив элементов приложения, в которые внесены изменения
генератор — чтобы работать с большим объёмом и динамически создавать элементы по одному до достижения заданного количества, а затем сохранить созданные объекты в базу данных. Это позволяет не перегружать память сервиса worker на сервере.
await Application.batch().save().items((function*(){ // Задаём массовое сохранение элементов и получаем в метод `items()` элементы, создаваемые функцией-генераторомfor (var i = 0; i < 500; i++) { // Выполняем цикл 500 раз, чтобы создать 500 элементовvar item = Application.create(); // Каждый раз создаём элементyield item // Возвращаем созданный элемент из генератора
}
})()).all(); // Сохраняем все элементы
Подробнее об использовании Application.batch().save() читайте также в статьях:
С помощью метода Application.batch().update() обновляется множество полей за один запрос. При этом вы можете:
указать правила такого обновления;
определить критерии поиска элементов, которые нужно обновить;
ограничить количество обновляемых элементов.
При написании скрипта с Application.batch().update() вы можете определить критерии для обновляемых элементов, используя метод set(), в котором:
Задайте имя обновляемого поля. Вы можете выбрать только существующее поле приложения.
Укажите, что сделать с этим полем:
заполнить определённым значением. При этом для поля типа Число можно указать только число, для поля типа Строка – текст и т. д.;
Application.batch().update().set('numberField', (f, op) =>1); // OK. Константа соответствует типу поля `numberField` – Число
Application.batch().update().set('numberField', (f, op) =>''); // Ошибка. Строковая константа не соответствует типу поля Число
заполнить значением другого поля того же типа;
Application.batch().update().set('numberField1', (f, op) => f.numberField2); // OK. Типы полей приложения `numberField1` и `numberField2` — числа
Application.batch().update().set('numberField1', (f, op) => f.strField); // Ошибка. Строковое поле `strField` не может быть приравнено к числовому полю `numberField1`
выполнить действие над значением в поле:
увеличить поле типа Число на заданное значение;
Application.batch().update().set('numberField', (f, op) => op.inc(f.numberField, 1)); // Увеличение значение поля `numberField` на 1
объединить два или более поля типа Строка;
Application.batch().update().set('strLocation', (f, op) => op.concat(f.strCountry, ',', f.strCity)); // Поле `strLocation` обновится как '{strCountry}, {strCity}', т. е. в нём будет записано два значения через запятую: страна, город
Application.batch().update().set('users', (f, op) => op.push(user, user1)); // Добавляем в конец массива двух пользователей. При этом тип полей `user`, `user1` должен быть того же типа, что и одиночный элемент поля `users`
При использовании метода Application.batch().update() обратите внимание на следующие особенности:
в одном запросе поле можно обновить только один раз;
если в скрипте не указано количество обновляемых элементов, то по умолчанию обновятся 10 элементов. При этом максимальное значение составляет 10000 элементов;
действия, которые вы задаёте в одном запросе в методах set() независимы и не влияют друг на друга. Поэтому порядок их расположения не имеет значения.
Пример:
var rows1 = await Application.batch()
.update()
.set('number', _ =>100)
.set('another_number', f => t.number)
.all();
var rows2 = await Application.batch()
.update()
.set('another_number', f => t.number)
.set('number', _ =>100)
.all();
// В обоих случаях `number` = 100, а `another_number` = значение поля `number` до обновления
Подробнее об использовании Application.batch().update() читайте также в статьях:
С помощью метода Application.batch().delete() удаляется множество элементов приложения за один запрос. При этом вы можете:
определить критерии поиска элементов, которые нужно удалить;
ограничить количество удаляемых элементов.
При использовании метода Application.batch().delete() обратите внимание, что если в скрипте не указано количество удаляемых
элементов, то по умолчанию удалятся 10 элементов. При этом максимальное значение составляет 10000 элементов.
Пример:
var count = await Application.batch()
.delete()
// Задаём критерии для поиска удаляемых элементов приложения
.where(f => f.number.gte(10))
.size(100)
.all();
Подробнее об использовании Application.batch().delete() читайте также в статьях:
Массовые действия с элементами приложения
Когда нужно обработать большое количество элементов приложения за один запрос, вы можете написать скрипт, используя методы массового добавления элементов или обновления их полей:
Application.batch().save()
— массовое добавление элементов приложения;Application.batch().update()
— массовое обновление полей элементов приложения;Application.batch().delete()
— массовое удаление элементов приложения.Обратите внимание:
Эти ограничения применяются ко всем указанным методам.
Массовое добавление элементов
Используя
Application.batch().save()
, вы можете за один запрос:При перечислении создаваемых элементов вы можете использовать в методе:
await Application.batch().save().items(orders).all(); // Тут `orders` — это массив элементов приложения, в которые внесены изменения
Подробнее об использованииawait Application.batch().save().items((function*(){ // Задаём массовое сохранение элементов и получаем в метод `items()` элементы, создаваемые функцией-генератором for (var i = 0; i < 500; i++) { // Выполняем цикл 500 раз, чтобы создать 500 элементов var item = Application.create(); // Каждый раз создаём элемент yield item // Возвращаем созданный элемент из генератора } })()).all(); // Сохраняем все элементы
Application.batch().save()
читайте также в статьях:Массовое обновление полей элементов
С помощью метода
Application.batch().update()
обновляется множество полей за один запрос. При этом вы можете:При написании скрипта с
Application.batch().update()
вы можете определить критерии для обновляемых элементов, используя методset()
, в котором:заполнить определённым значением. При этом для поля типа Число можно указать только число, для поля типа Строка – текст и т. д.;
Application.batch().update().set('numberField', (f, op) => 1); // OK. Константа соответствует типу поля `numberField` – Число Application.batch().update().set('numberField', (f, op) => ''); // Ошибка. Строковая константа не соответствует типу поля Число
заполнить значением другого поля того же типа;
Application.batch().update().set('numberField1', (f, op) => f.numberField2); // OK. Типы полей приложения `numberField1` и `numberField2` — числа Application.batch().update().set('numberField1', (f, op) => f.strField); // Ошибка. Строковое поле `strField` не может быть приравнено к числовому полю `numberField1`
выполнить действие над значением в поле:
Application.batch().update().set('numberField', (f, op) => op.inc(f.numberField, 1)); // Увеличение значение поля `numberField` на 1
Application.batch().update().set('strLocation', (f, op) => op.concat(f.strCountry, ',', f.strCity)); // Поле `strLocation` обновится как '{strCountry}, {strCity}', т. е. в нём будет записано два значения через запятую: страна, город
Application.batch().update().set('users', (f, op) => op.remove(user)); // Удалили пользователя
Application.batch().update().set('users', (f, op) => op.push(user, user1)); // Добавляем в конец массива двух пользователей. При этом тип полей `user`, `user1` должен быть того же типа, что и одиночный элемент поля `users`
При использовании метода
Application.batch().update()
обратите внимание на следующие особенности:set()
независимы и не влияют друг на друга. Поэтому порядок их расположения не имеет значения.Пример:
var rows1 = await Application.batch() .update() .set('number', _ => 100) .set('another_number', f => t.number) .all(); var rows2 = await Application.batch() .update() .set('another_number', f => t.number) .set('number', _ => 100) .all(); // В обоих случаях `number` = 100, а `another_number` = значение поля `number` до обновления
Подробнее об использовании
Application.batch().update()
читайте также в статьях:Массовое удаление элементов
С помощью метода
Application.batch().delete()
удаляется множество элементов приложения за один запрос. При этом вы можете:При использовании метода
Application.batch().delete()
обратите внимание, что если в скрипте не указано количество удаляемых элементов, то по умолчанию удалятся 10 элементов. При этом максимальное значение составляет 10000 элементов.Пример:
var count = await Application.batch() .delete() // Задаём критерии для поиска удаляемых элементов приложения .where(f => f.number.gte(10)) .size(100) .all();
Подробнее об использовании
Application.batch().delete()
читайте также в статьях: