You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-23 22:05:15 +02:00
MongoDB: Удаление документов, создание пользователей
This commit is contained in:
@@ -435,6 +435,167 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Обновить документы
|
||||||
|
// Обновляет данные документов в коллекции
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
|
// Обновления - Массив Из Структура - Массив обновлений. См. ПолучитьСтруктуруОбновленияДокументов - updates
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры вставки - params
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
|
Функция ОбновитьДокументы(Знач Соединение
|
||||||
|
, Знач Коллекция
|
||||||
|
, Знач Обновления
|
||||||
|
, Знач База = Неопределено
|
||||||
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Коллекция);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(Обновления);
|
||||||
|
|
||||||
|
Если База <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Параметры <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||||
|
Иначе
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивОбновлений = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Элемент Из Обновления Цикл
|
||||||
|
|
||||||
|
ТекущийЭлемент = Элемент;
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ТекущийЭлемент);
|
||||||
|
МассивОбновлений.Добавить(ТекущийЭлемент);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Параметры.Вставить("updates", МассивОбновлений);
|
||||||
|
|
||||||
|
Результат = ВыполнитьКоманду(Соединение, "update", Коллекция, База, Параметры);
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить документы
|
||||||
|
// Получает документы коллекции
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||||
|
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
|
Функция ПолучитьДокументы(Знач Соединение
|
||||||
|
, Знач Коллекция
|
||||||
|
, Знач База = Неопределено
|
||||||
|
, Знач Фильтр = Неопределено
|
||||||
|
, Знач Сортировка = Неопределено
|
||||||
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
|
Курсор = ПолучитьКурсор(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
||||||
|
|
||||||
|
Если Не Курсор["result"] Тогда
|
||||||
|
Возврат Курсор;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Курсор = Курсор["data"]["cursor"];
|
||||||
|
МассивДокументов = Курсор["firstBatch"];
|
||||||
|
IDКурсора = Курсор["id"];
|
||||||
|
ПродолжатьВыборку = IDКурсора > 0;
|
||||||
|
|
||||||
|
Пока ПродолжатьВыборку Цикл
|
||||||
|
|
||||||
|
Пакет = ПолучитьПакетДокументов(Соединение, Коллекция, IDКурсора, База);
|
||||||
|
Успех = Пакет["result"];
|
||||||
|
Данные = Пакет["data"];
|
||||||
|
|
||||||
|
Если Не Успех Тогда
|
||||||
|
Возврат Пакет;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Курсор = Данные["cursor"];
|
||||||
|
|
||||||
|
Если Курсор = Неопределено Тогда
|
||||||
|
Возврат Пакет;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПродолжатьВыборку = Курсор["id"] > 0;
|
||||||
|
|
||||||
|
Для Каждого Запись Из Курсор["nextBatch"] Цикл
|
||||||
|
МассивДокументов.Добавить(Запись);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Результат = Новый Соответствие;
|
||||||
|
Результат.Вставить("result", Истина);
|
||||||
|
Результат.Вставить("data" , МассивДокументов);
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Удалить документы
|
||||||
|
// Удаляет документы коллекции
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
|
// Удаления - Массив Из Структура - Массив удаления. См. ПолучитьСтруктуруУдаленияДокументов - deletes
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры вставки - params
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
|
Функция УдалитьДокументы(Знач Соединение
|
||||||
|
, Знач Коллекция
|
||||||
|
, Знач Удаления
|
||||||
|
, Знач База = Неопределено
|
||||||
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Коллекция);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(Удаления);
|
||||||
|
|
||||||
|
Если База <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Параметры <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||||
|
Иначе
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
МассивОбновлений = Новый Массив;
|
||||||
|
|
||||||
|
Для Каждого Элемент Из Удаления Цикл
|
||||||
|
|
||||||
|
ТекущийЭлемент = Элемент;
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ТекущийЭлемент);
|
||||||
|
МассивОбновлений.Добавить(ТекущийЭлемент);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Параметры.Вставить("deletes", МассивОбновлений);
|
||||||
|
|
||||||
|
Результат = ВыполнитьКоманду(Соединение, "delete", Коллекция, База, Параметры);
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
// Получить курсор
|
// Получить курсор
|
||||||
// Получает курсор для порционного получения документов коллекции
|
// Получает курсор для порционного получения документов коллекции
|
||||||
//
|
//
|
||||||
@@ -442,7 +603,7 @@
|
|||||||
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
// Коллекция - Строка - Имя коллекции - coll
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
// База - Строка - Имя базы. Текущая база, если не указано - db
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||||
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||||
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||||
//
|
//
|
||||||
@@ -513,58 +674,112 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
// Получить документы
|
// Получить структуру обновления документов
|
||||||
// Получает документы коллекции
|
// Формирует структуру данных для обновления документов
|
||||||
//
|
//
|
||||||
// Параметры:
|
// Параметры:
|
||||||
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||||
// Коллекция - Строка - Имя коллекции - coll
|
// Данные - Структура Из КлючИЗначение - Новые данные документов для обновления - data
|
||||||
// База - Строка - Имя базы. Текущая база, если не указано - db
|
// ОбновитьВсе - Булево - Истина > обновляет все документы по фильтру, Ложь > только один - multi
|
||||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
// Вставлять - Булево - Вставить новый документ, если ни один документ не был найден - upsert
|
||||||
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
// Сопоставление - Структура Из КлючИЗначение - Особые настройки правил сравнения полей при поиске - cltn
|
||||||
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура Из КлючИЗначение - Результат закрытия соединения
|
||||||
|
Функция ПолучитьСтруктуруОбновленияДокументов(Знач Фильтр
|
||||||
|
, Знач Данные
|
||||||
|
, Знач ОбновитьВсе = Истина
|
||||||
|
, Знач Вставлять = Ложь
|
||||||
|
, Знач Сопоставление = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СтруктураОбновления = Новый Структура;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("q" , Фильтр , "КлючИЗначение", СтруктураОбновления);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("u" , Данные , "КлючИЗначение", СтруктураОбновления);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("multi" , ОбновитьВсе , "Булево" , СтруктураОбновления);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("upsert" , Вставлять , "Булево" , СтруктураОбновления);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("collation", Сопоставление, "КлючИЗначение", СтруктураОбновления);
|
||||||
|
|
||||||
|
Возврат СтруктураОбновления;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить структуру удаления документов
|
||||||
|
// Формирует структу данных для обновления
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||||
|
// Количество - Число - Лимит удаления: 1 > первый документ, 0 > все документы - limit
|
||||||
|
// Сопоставление - Структура Из КлючИЗначение - Особые настройки правил сравнения полей при поиске - cltn
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Структура - Получить структуру удаления документов
|
||||||
|
Функция ПолучитьСтруктуруУдаленияДокументов(Знач Фильтр, Знач Количество = 0, Сопоставление = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СтруктураУдаления = Новый Структура;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("q" , Фильтр , "КлючИЗначение", СтруктураУдаления);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("collation", Сопоставление, "КлючИЗначение", СтруктураУдаления);
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Количество);
|
||||||
|
СтруктураУдаления.Вставить("limit", Количество);
|
||||||
|
|
||||||
|
Возврат СтруктураУдаления;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#Область ПользователиИРоли
|
||||||
|
|
||||||
|
// Создать пользователя
|
||||||
|
// Создает нового пользователя
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Имя - Строка - Имя пользователя - name
|
||||||
|
// РолиПользователя - Массив Из Произвольный - Массив ролей в виде строк или структур с указанием БД - roles
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Пароль - Строка - Пароль пользователя - pwd
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры создания - params
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
Функция ПолучитьДокументы(Знач Соединение
|
Функция СоздатьПользователя(Знач Соединение
|
||||||
, Знач Коллекция
|
, Знач Имя
|
||||||
|
, Знач РолиПользователя
|
||||||
, Знач База = Неопределено
|
, Знач База = Неопределено
|
||||||
, Знач Фильтр = Неопределено
|
, Знач Пароль = Неопределено
|
||||||
, Знач Сортировка = Неопределено
|
|
||||||
, Знач Параметры = Неопределено) Экспорт
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
Курсор = ПолучитьКурсор(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьМассив(РолиПользователя);
|
||||||
|
|
||||||
|
Данные = Новый Структура;
|
||||||
|
Данные.Вставить("roles", РолиПользователя);
|
||||||
|
|
||||||
|
Если Пароль <> Неопределено Тогда
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
|
||||||
|
Данные.Вставить("pwd", Пароль);
|
||||||
|
|
||||||
Если Не Курсор["result"] Тогда
|
|
||||||
Возврат Курсор;
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Курсор = Курсор["data"]["cursor"];
|
Если Параметры <> Неопределено Тогда
|
||||||
МассивДокументов = Курсор["firstBatch"];
|
|
||||||
IDКурсора = Курсор["id"];
|
|
||||||
ПродолжатьВыборку = IDКурсора > 0;
|
|
||||||
|
|
||||||
Пока ПродолжатьВыборку Цикл
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||||
|
|
||||||
Пакет = ПолучитьПакетДокументов(Соединение, Коллекция, IDКурсора, База);
|
Для Каждого Поле Из Параметры Цикл
|
||||||
Успех = Пакет["result"];
|
Данные.Вставить(Поле.Ключ, Поле.Значение);
|
||||||
|
|
||||||
Если Не Успех Тогда
|
|
||||||
Возврат Пакет;
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
ПродолжатьВыборку = Пакет["cursor"]["id"] > 0;
|
|
||||||
|
|
||||||
Для Каждого Запись Из Пакет["cursor"]["nextBatch"] Цикл
|
|
||||||
МассивДокументов.Добавить(Запись);
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
КонецЦикла;
|
КонецЕсли;
|
||||||
|
|
||||||
Результат = Новый Соответствие;
|
Если База <> Неопределено Тогда
|
||||||
Результат.Вставить("result", Истина);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
Результат.Вставить("data" , МассивДокументов);
|
КонецЕсли;
|
||||||
|
|
||||||
|
Результат = ВыполнитьКоманду(Соединение, "createUser", Имя, База, Данные);
|
||||||
Возврат Результат;
|
Возврат Результат;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|||||||
@@ -12322,6 +12322,186 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Проверка_MongoDB_ОбновитьДокументы(Знач Результат, Знач Вариант)
|
||||||
|
|
||||||
|
Вариант = Строка(Вариант);
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||||
|
|
||||||
|
Если Вариант = "Проверка" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
ОжидаетЧто(Результат["data"][0]["doubleField"]).Равно(999);
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 1" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
ОжидаетЧто(Док["price"]).Равно(777);
|
||||||
|
ОжидаетЧто(Док["inStock"]).Равно(Ложь);
|
||||||
|
ОжидаетЧто(Док["rating"]).Равно(5);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 2" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
ОжидаетЧто(Результат["data"][0]["quantity"] > 10).Равно(Истина);
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 3" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
Найден = Ложь;
|
||||||
|
|
||||||
|
Для Каждого Тэг Из Док["tags"] Цикл
|
||||||
|
Если Тэг = "обновленный" Тогда
|
||||||
|
Найден = Истина;
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ОжидаетЧто(Найден).Равно(Истина);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 4" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
ОжидаетЧто(Док["details"]["supplier"]).Равно("Поставщик А+");
|
||||||
|
ОжидаетЧто(Док["details"]["weightKg"]).Равно(2.5);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 5" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
ОжидаетЧто(Результат["data"][0]["productName"]).Равно("Новый товар");
|
||||||
|
ОжидаетЧто(Результат["data"][0]["price"]).Равно(1999);
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 6" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
ОжидаетЧто(Док["rating"]).Равно(Неопределено);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 7" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
ОжидаетЧто(Док["inStock"]).Равно(Ложь);
|
||||||
|
|
||||||
|
Найден = Ложь;
|
||||||
|
|
||||||
|
Для Каждого Тэг Из Док["tags"] Цикл
|
||||||
|
Если Тэг = "уценка" Тогда
|
||||||
|
Найден = Истина;
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ОжидаетЧто(Найден).Равно(Истина);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 8_1" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
ОжидаетЧто(Док["price"]).Равно(888);
|
||||||
|
ОжидаетЧто(Док["discounted"]).Равно(Истина);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 8_2" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
|
||||||
|
Найден = Ложь;
|
||||||
|
|
||||||
|
Для Каждого Тэг Из Док["tags"] Цикл
|
||||||
|
Если Тэг = "массовое_обновление" Тогда
|
||||||
|
Найден = Истина;
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ОжидаетЧто(Найден).Равно(Истина);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 8_3" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
ОжидаетЧто(Результат["data"][0]["productName"]).Равно("Специальный товар из массива");
|
||||||
|
ОжидаетЧто(Результат["data"][0]["price"]).Равно(1111);
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Проверка 8_4" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
|
||||||
|
Для Каждого Док Из Результат["data"] Цикл
|
||||||
|
ОжидаетЧто(Док["needsImprovement"]).Равно(Истина);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Получение" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"].Количество()).Равно(0);
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "Получение новых" Тогда
|
||||||
|
|
||||||
|
Для Каждого Элемент Из Результат["data"] Цикл
|
||||||
|
ОжидаетЧто(Элемент["doubleField"]).Равно(999);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ИначеЕсли Вариант = "5" Тогда
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["data"]["upserted"].Количество() > 0 Или Результат["data"]["nModified"] > 0).Равно(Истина);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
ОжидаетЧто(Результат["data"]["nModified"] > 0).Равно(Истина);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Проверка_MongoDB_ПолучитьСтруктуруОбновленияДокументов(Знач Результат, Знач Вариант)
|
||||||
|
|
||||||
|
ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
|
||||||
|
|
||||||
|
Возврат Результат
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Проверка_MongoDB_УдалитьДокументы(Знач Результат, Знач Вариант)
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||||
|
|
||||||
|
Если Вариант = "Проверка" Тогда
|
||||||
|
ОжидаетЧто(Результат["data"].Количество()).Равно(1);
|
||||||
|
ИначеЕсли Вариант = "Предпроверка" Тогда
|
||||||
|
ОжидаетЧто(Результат["data"].Количество()).Равно(2);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#Область ReportPortal
|
#Область ReportPortal
|
||||||
|
|||||||
256
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
256
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
@@ -3242,6 +3242,9 @@
|
|||||||
MongoDB_ПолучитьДокументы(ПараметрыТеста);
|
MongoDB_ПолучитьДокументы(ПараметрыТеста);
|
||||||
MongoDB_ПолучитьКурсор(ПараметрыТеста);
|
MongoDB_ПолучитьКурсор(ПараметрыТеста);
|
||||||
MongoDB_ПолучитьПакетДокументов(ПараметрыТеста);
|
MongoDB_ПолучитьПакетДокументов(ПараметрыТеста);
|
||||||
|
MongoDB_ОбновитьДокументы(ПараметрыТеста);
|
||||||
|
MongoDB_УдалитьДокументы(ПараметрыТеста);
|
||||||
|
MongoDB_ПолучитьСтруктуруОбновленияДокументов(ПараметрыТеста);
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@@ -25266,6 +25269,259 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура MongoDB_ОбновитьДокументы(ПараметрыФункции)
|
||||||
|
|
||||||
|
Адрес = "127.0.0.1:1234";
|
||||||
|
Логин = ПараметрыФункции["MongoDB_User"];
|
||||||
|
Пароль = ПараметрыФункции["MongoDB_Password"];
|
||||||
|
База = ПараметрыФункции["MongoDB_DB"];
|
||||||
|
|
||||||
|
Адрес = OPI_ПолучениеДанныхТестов.ПолучитьLocalhost() + ":" + ПараметрыФункции["MongoDB_Port"]; // SKIP
|
||||||
|
|
||||||
|
ПараметрыПодключения = Новый Структура("authSource", "admin");
|
||||||
|
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль, ПараметрыПодключения);
|
||||||
|
Соединение = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
|
||||||
|
|
||||||
|
Коллекция = "new_collection";
|
||||||
|
|
||||||
|
// __4 = $
|
||||||
|
Фильтр = Новый Структура("stringField,doubleField", "Текст", Новый Структура("__4gte, __4lte", 100, 150));
|
||||||
|
Данные = Новый Структура( "__4set", Новый Структура("doubleField", 999));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные); // Массив или одиночное
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
|
||||||
|
// END
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы");
|
||||||
|
|
||||||
|
Параметры = Новый Структура("limit,batchSize", 2, 1);
|
||||||
|
Сортировка = Новый Структура("doubleField", -1);
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", "Получение");
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("stringField,doubleField", "Текст", 999);
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", "Получение новых");
|
||||||
|
|
||||||
|
// Multiply fields
|
||||||
|
Фильтр = Новый Структура("category", "электроника");
|
||||||
|
Данные = Новый Структура("__4set", Новый Структура("price,inStock,rating", 777, Ложь, 5));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные, Истина);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 1);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("category", "электроника", "price", 777);
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 1");
|
||||||
|
|
||||||
|
// Number inc
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 1");
|
||||||
|
Данные = Новый Структура("__4inc", Новый Структура("quantity", 10));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 2);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 1");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 2");
|
||||||
|
|
||||||
|
// Array insertion
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 2");
|
||||||
|
Данные = Новый Структура("__4push", Новый Структура("tags", "обновленный"));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 3);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 2", "tags", "обновленный");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 3");
|
||||||
|
|
||||||
|
// Nested field update
|
||||||
|
СоответствиеУстановки = Новый Соответствие;
|
||||||
|
СоответствиеУстановки.Вставить("details.weightKg", 2.5);
|
||||||
|
СоответствиеУстановки.Вставить("details.supplier", "Поставщик А+");
|
||||||
|
|
||||||
|
Фильтр = Новый Соответствие;
|
||||||
|
Фильтр.Вставить("details.supplier", "Поставщик А");
|
||||||
|
|
||||||
|
Данные = Новый Структура("__4set", СоответствиеУстановки);
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные, Истина);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 4);
|
||||||
|
|
||||||
|
Фильтр = Новый Соответствие;
|
||||||
|
Фильтр.Вставить("details.supplier", "Поставщик А+");
|
||||||
|
Фильтр.Вставить("details.weightKg", 2.5);
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 4");
|
||||||
|
|
||||||
|
// Upsert
|
||||||
|
Фильтр = Новый Структура("productName", "Новый товар");
|
||||||
|
|
||||||
|
//@skip-check structure-consructor-too-many-keys
|
||||||
|
Данные = Новый Структура("__4set", Новый Структура("productName,category,price,quantity,inStock,createdDate"
|
||||||
|
, "Новый товар"
|
||||||
|
, "электроника"
|
||||||
|
, 1999
|
||||||
|
, 1
|
||||||
|
, Истина
|
||||||
|
, OPI_Инструменты.ПолучитьТекущуюДату()
|
||||||
|
));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные, Ложь, Истина);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 5);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("productName", "Новый товар");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 5");
|
||||||
|
|
||||||
|
// Field removing
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 3");
|
||||||
|
Данные = Новый Структура("__4unset", Новый Структура("rating", ""));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 6);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("productName", "Товар 3");
|
||||||
|
Параметры = Новый Структура("projection", Новый Структура("productName,rating", 1, 1));
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр, Неопределено, Параметры);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 6");
|
||||||
|
|
||||||
|
// Multiply operators
|
||||||
|
Фильтр = Новый Структура("price", Новый Структура("__4lt", 200));
|
||||||
|
Данные = Новый Структура;
|
||||||
|
Данные.Вставить("__4set", Новый Структура("inStock", Ложь));
|
||||||
|
Данные.Вставить("__4inc", Новый Структура("quantity", -5));
|
||||||
|
Данные.Вставить("__4push", Новый Структура("tags", "уценка"));
|
||||||
|
|
||||||
|
Обновление = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные, Истина);
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, Обновление, База);
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 7);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("price,tags", Новый Структура("__4lt", 200), "уценка");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 7");
|
||||||
|
|
||||||
|
// Updates array
|
||||||
|
МассивОбновлений = Новый Массив;
|
||||||
|
|
||||||
|
Фильтр1 = Новый Структура("category", "электроника");
|
||||||
|
Данные1 = Новый Структура("__4set", Новый Структура("price,discounted", 888, Истина));
|
||||||
|
Обновление1 = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр1, Данные1, Истина);
|
||||||
|
МассивОбновлений.Добавить(Обновление1);
|
||||||
|
|
||||||
|
Фильтр2 = Новый Структура("category", "одежда");
|
||||||
|
Данные2 = Новый Структура("__4inc", Новый Структура("quantity", 5));
|
||||||
|
Обновление2 = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр2, Данные2, Истина);
|
||||||
|
МассивОбновлений.Добавить(Обновление2);
|
||||||
|
|
||||||
|
Фильтр3 = Новый Структура("category", "книги");
|
||||||
|
Данные3 = Новый Структура("__4push", Новый Структура("tags", "массовое_обновление"));
|
||||||
|
Обновление3 = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр3, Данные3, Истина);
|
||||||
|
МассивОбновлений.Добавить(Обновление3);
|
||||||
|
|
||||||
|
Фильтр4 = Новый Структура("productName", "Специальный товар из массива");
|
||||||
|
|
||||||
|
//@skip-check structure-consructor-too-many-keys
|
||||||
|
Данные4 = Новый Структура("__4set", Новый Структура("productName,category,price,quantity,inStock,createdDate"
|
||||||
|
, "Специальный товар из массива"
|
||||||
|
, "специальная"
|
||||||
|
, 1111
|
||||||
|
, 7
|
||||||
|
, Истина
|
||||||
|
, OPI_Инструменты.ПолучитьТекущуюДату()
|
||||||
|
));
|
||||||
|
|
||||||
|
Обновление4 = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр4, Данные4, Ложь, Истина);
|
||||||
|
МассивОбновлений.Добавить(Обновление4);
|
||||||
|
|
||||||
|
Фильтр5 = Новый Структура("rating", Новый Структура("__4lte", 2));
|
||||||
|
Данные5 = Новый Структура;
|
||||||
|
Данные5.Вставить("__4set", Новый Структура("needsImprovement", Истина));
|
||||||
|
Данные5.Вставить("__4inc", Новый Структура("quantity", -2));
|
||||||
|
Обновление5 = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр5, Данные5, Истина);
|
||||||
|
МассивОбновлений.Добавить(Обновление5);
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ОбновитьДокументы(Соединение, Коллекция, МассивОбновлений, База);
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ОбновитьДокументы", 9);
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("category,price", "электроника", 888);
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 8_1");
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("category,tags", "книги", "массовое_обновление");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 8_2");
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("productName", "Специальный товар из массива");
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 8_3");
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("needsImprovement", Истина);
|
||||||
|
РезультатПроверки = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
Обработать(РезультатПроверки, "MongoDB", "ОбновитьДокументы", "Проверка 8_4");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура MongoDB_ПолучитьСтруктуруОбновленияДокументов(ПараметрыФункции)
|
||||||
|
|
||||||
|
// __4 = $
|
||||||
|
Фильтр = Новый Структура("stringField,doubleField", "Текст", Новый Структура("__4gte, __4lte", 100, 150));
|
||||||
|
Данные = Новый Структура( "__4set", Новый Структура("doubleField", 999));
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьСтруктуруОбновленияДокументов(Фильтр, Данные, Истина, Истина);
|
||||||
|
|
||||||
|
// END
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ПолучитьСтруктуруОбновленияДокументов");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура MongoDB_УдалитьДокументы(ПараметрыФункции)
|
||||||
|
|
||||||
|
Адрес = "127.0.0.1:1234";
|
||||||
|
Логин = ПараметрыФункции["MongoDB_User"];
|
||||||
|
Пароль = ПараметрыФункции["MongoDB_Password"];
|
||||||
|
База = ПараметрыФункции["MongoDB_DB"];
|
||||||
|
|
||||||
|
Адрес = OPI_ПолучениеДанныхТестов.ПолучитьLocalhost() + ":" + ПараметрыФункции["MongoDB_Port"]; // SKIP
|
||||||
|
|
||||||
|
ПараметрыПодключения = Новый Структура("authSource", "admin");
|
||||||
|
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль, ПараметрыПодключения);
|
||||||
|
Соединение = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
|
||||||
|
|
||||||
|
Коллекция = "new_collection";
|
||||||
|
|
||||||
|
Фильтр = Новый Структура("stringField,doubleField", "Текст", 999);
|
||||||
|
Удаление = OPI_MongoDB.ПолучитьСтруктуруУдаленияДокументов(Фильтр, 1); // Массив или одиночное
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр); // SKIP
|
||||||
|
Обработать(Результат, "MongoDB", "УдалитьДокументы", "Предпроверка"); // SKIP
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.УдалитьДокументы(Соединение, Коллекция, Удаление, База);
|
||||||
|
|
||||||
|
// END
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "УдалитьДокументы");
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр);
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "УдалитьДокументы", "Проверка");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|||||||
Reference in New Issue
Block a user