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
|
||||
// Коллекция - Строка - Имя коллекции - coll
|
||||
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||
//
|
||||
@@ -513,60 +674,114 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить документы
|
||||
// Получает документы коллекции
|
||||
//
|
||||
// Получить структуру обновления документов
|
||||
// Формирует структуру данных для обновления документов
|
||||
//
|
||||
// Параметры:
|
||||
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||
// Коллекция - Строка - Имя коллекции - coll
|
||||
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
||||
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||
//
|
||||
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - query
|
||||
// Данные - Структура Из КлючИЗначение - Новые данные документов для обновления - data
|
||||
// ОбновитьВсе - Булево - Истина > обновляет все документы по фильтру, Ложь > только один - multi
|
||||
// Вставлять - Булево - Вставить новый документ, если ни один документ не был найден - upsert
|
||||
// Сопоставление - Структура Из КлючИЗначение - Особые настройки правил сравнения полей при поиске - cltn
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Результат закрытия соединения
|
||||
Функция ПолучитьСтруктуруОбновленияДокументов(Знач Фильтр
|
||||
, Знач Данные
|
||||
, Знач ОбновитьВсе = Истина
|
||||
, Знач Вставлять = Ложь
|
||||
, Знач Сопоставление = Неопределено) Экспорт
|
||||
|
||||
СтруктураОбновления = Новый Структура;
|
||||
|
||||
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
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||
Функция ПолучитьДокументы(Знач Соединение
|
||||
, Знач Коллекция
|
||||
Функция СоздатьПользователя(Знач Соединение
|
||||
, Знач Имя
|
||||
, Знач РолиПользователя
|
||||
, Знач База = Неопределено
|
||||
, Знач Фильтр = Неопределено
|
||||
, Знач Сортировка = Неопределено
|
||||
, Знач Пароль = Неопределено
|
||||
, Знач Параметры = Неопределено) Экспорт
|
||||
|
||||
Курсор = ПолучитьКурсор(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
||||
|
||||
Если Не Курсор["result"] Тогда
|
||||
Возврат Курсор;
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
|
||||
OPI_ПреобразованиеТипов.ПолучитьМассив(РолиПользователя);
|
||||
|
||||
Данные = Новый Структура;
|
||||
Данные.Вставить("roles", РолиПользователя);
|
||||
|
||||
Если Пароль <> Неопределено Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
|
||||
Данные.Вставить("pwd", Пароль);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Курсор = Курсор["data"]["cursor"];
|
||||
МассивДокументов = Курсор["firstBatch"];
|
||||
IDКурсора = Курсор["id"];
|
||||
ПродолжатьВыборку = IDКурсора > 0;
|
||||
|
||||
Пока ПродолжатьВыборку Цикл
|
||||
|
||||
Пакет = ПолучитьПакетДокументов(Соединение, Коллекция, IDКурсора, База);
|
||||
Успех = Пакет["result"];
|
||||
|
||||
Если Не Успех Тогда
|
||||
Возврат Пакет;
|
||||
КонецЕсли;
|
||||
|
||||
ПродолжатьВыборку = Пакет["cursor"]["id"] > 0;
|
||||
|
||||
Для Каждого Запись Из Пакет["cursor"]["nextBatch"] Цикл
|
||||
МассивДокументов.Добавить(Запись);
|
||||
|
||||
Если Параметры <> Неопределено Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||
|
||||
Для Каждого Поле Из Параметры Цикл
|
||||
Данные.Вставить(Поле.Ключ, Поле.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
Результат.Вставить("result", Истина);
|
||||
Результат.Вставить("data" , МассивДокументов);
|
||||
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если База <> Неопределено Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||
КонецЕсли;
|
||||
|
||||
Результат = ВыполнитьКоманду(Соединение, "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
|
||||
|
||||
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_ПолучитьСтруктуруОбновленияДокументов(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -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