You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-25 22:12:29 +02:00
MongoDB: Фикс приведения строковых значений, получение документов
This commit is contained in:
@@ -19,8 +19,12 @@ pub fn json_value_to_bson(value: &Value) -> Result<Bson, String> {
|
|||||||
},
|
},
|
||||||
Value::Object(obj) => {
|
Value::Object(obj) => {
|
||||||
|
|
||||||
if let Some(str) = obj.get("__OPI_STRING__"){
|
if let Some(str_value) = obj.get("__OPI_STRING__") {
|
||||||
return Ok(Bson::String(str.to_string()))
|
return if let Value::String(s) = str_value {
|
||||||
|
Ok(Bson::String(s.clone()))
|
||||||
|
} else {
|
||||||
|
Ok(Bson::String(str_value.to_string()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(int32) = obj.get("__OPI_INT32__") {
|
if let Some(int32) = obj.get("__OPI_INT32__") {
|
||||||
@@ -87,12 +91,20 @@ pub fn json_value_to_bson(value: &Value) -> Result<Bson, String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(s) = obj.get("__OPI_JS__"){
|
if let Some(js_value) = obj.get("__OPI_JS__") {
|
||||||
return Ok(Bson::JavaScriptCode(s.to_string()))
|
return if let Value::String(s) = js_value {
|
||||||
|
Ok(Bson::JavaScriptCode(s.clone()))
|
||||||
|
} else {
|
||||||
|
Ok(Bson::JavaScriptCode(js_value.to_string()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(s) = obj.get("__OPI_SYMBOL__"){
|
if let Some(symbol_value) = obj.get("__OPI_SYMBOL__") {
|
||||||
return Ok(Bson::Symbol(s.to_string()))
|
return if let Value::String(s) = symbol_value {
|
||||||
|
Ok(Bson::Symbol(s.clone()))
|
||||||
|
} else {
|
||||||
|
Ok(Bson::Symbol(symbol_value.to_string()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = obj.get("__OPI_MINKEY__") {
|
if let Some(_) = obj.get("__OPI_MINKEY__") {
|
||||||
|
|||||||
BIN
src/en/OInt/addins/OPI_MongoDB.zip
vendored
BIN
src/en/OInt/addins/OPI_MongoDB.zip
vendored
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_MongoDB.zip
vendored
BIN
src/ru/OInt/addins/OPI_MongoDB.zip
vendored
Binary file not shown.
@@ -435,6 +435,88 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить курсор
|
||||||
|
// Получает курсор для порционного получения документов коллекции
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
||||||
|
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
|
Функция ПолучитьКурсор(Знач Соединение
|
||||||
|
, Знач Коллекция
|
||||||
|
, Знач База = Неопределено
|
||||||
|
, Знач Фильтр = Неопределено
|
||||||
|
, Знач Сортировка = Неопределено
|
||||||
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Коллекция);
|
||||||
|
|
||||||
|
Если База <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Параметры <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||||
|
Иначе
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("filter", Фильтр , "КлючИЗначение", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("sort" , Сортировка, "КлючИЗначение", Параметры);
|
||||||
|
|
||||||
|
Результат = ВыполнитьКоманду(Соединение, "find", Коллекция, База, Параметры);
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// Получить документы
|
||||||
|
// Получает документы коллекции
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||||
|
// Коллекция - Строка - Имя коллекции - coll
|
||||||
|
// База - Строка - Имя базы. Текущая база, если не указано - db
|
||||||
|
// Фильтр - Структура Из КлючИЗначение - Фильтр документов - filter
|
||||||
|
// Сортировка - Структура Из КлючИЗначение - Сортировка выборки - sort
|
||||||
|
// Параметры - Структура Из КлючИЗначение - Дополнительные параметры получения - params
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Соответствие Из КлючИЗначение - Результат выполнения операции
|
||||||
|
Функция ПолучитьДокументы(Знач Соединение
|
||||||
|
, Знач Коллекция
|
||||||
|
, Знач База = Неопределено
|
||||||
|
, Знач Фильтр = Неопределено
|
||||||
|
, Знач Сортировка = Неопределено
|
||||||
|
, Знач Параметры = Неопределено) Экспорт
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(Коллекция);
|
||||||
|
|
||||||
|
Если База <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Параметры <> Неопределено Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||||
|
Иначе
|
||||||
|
Параметры = Новый Структура;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьПоле("filter", Фильтр , "КлючИЗначение", Параметры);
|
||||||
|
OPI_Инструменты.ДобавитьПоле("sort" , Сортировка, "КлючИЗначение", Параметры);
|
||||||
|
|
||||||
|
Результат = ВыполнитьКоманду(Соединение, "find", Коллекция, База, Параметры);
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|||||||
@@ -411,6 +411,9 @@
|
|||||||
ИначеЕсли Тип = "Коллекция" Тогда
|
ИначеЕсли Тип = "Коллекция" Тогда
|
||||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение);
|
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение);
|
||||||
|
|
||||||
|
ИначеЕсли Тип = "КлючИЗначение" Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Значение);
|
||||||
|
|
||||||
ИначеЕсли Тип = "Булево" Тогда
|
ИначеЕсли Тип = "Булево" Тогда
|
||||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Значение);
|
OPI_ПреобразованиеТипов.ПолучитьБулево(Значение);
|
||||||
|
|
||||||
|
|||||||
@@ -12173,6 +12173,14 @@
|
|||||||
|
|
||||||
Функция Проверка_MongoDB_ВставитьДокументы(Знач Результат, Знач Вариант)
|
Функция Проверка_MongoDB_ВставитьДокументы(Знач Результат, Знач Вариант)
|
||||||
|
|
||||||
|
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||||
|
ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Проверка_MongoDB_ПолучитьДокументы(Знач Результат, Знач Вариант)
|
||||||
|
|
||||||
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||||
Возврат Результат;
|
Возврат Результат;
|
||||||
|
|
||||||
|
|||||||
@@ -3239,6 +3239,7 @@
|
|||||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||||
|
|
||||||
MongoDB_ВставитьДокументы(ПараметрыТеста);
|
MongoDB_ВставитьДокументы(ПараметрыТеста);
|
||||||
|
MongoDB_ПолучитьДокументы(ПараметрыТеста);
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@@ -24963,6 +24964,7 @@
|
|||||||
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль, ПараметрыПодключения);
|
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль, ПараметрыПодключения);
|
||||||
Соединение = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
|
Соединение = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
|
||||||
|
|
||||||
|
Коллекция = "new_collection";
|
||||||
МассивДокументов = Новый Массив;
|
МассивДокументов = Новый Массив;
|
||||||
|
|
||||||
// С неявным приведением типов
|
// С неявным приведением типов
|
||||||
@@ -24999,7 +25001,7 @@
|
|||||||
СтруктураДокумента.Вставить("symbolField", Новый Структура("__OPI_SYMBOL__" , "Y"));
|
СтруктураДокумента.Вставить("symbolField", Новый Структура("__OPI_SYMBOL__" , "Y"));
|
||||||
СтруктураДокумента.Вставить("int32Field" , Новый Структура("__OPI_INT32__" , 10));
|
СтруктураДокумента.Вставить("int32Field" , Новый Структура("__OPI_INT32__" , 10));
|
||||||
СтруктураДокумента.Вставить("int64Field" , Новый Структура("__OPI_INT64__" , 1000));
|
СтруктураДокумента.Вставить("int64Field" , Новый Структура("__OPI_INT64__" , 1000));
|
||||||
СтруктураДокумента.Вставить("doubleField", Новый Структура("__OPI_DOUBLE__" , 123.456));
|
СтруктураДокумента.Вставить("doubleField", Новый Структура("__OPI_DOUBLE__" , 124.456));
|
||||||
СтруктураДокумента.Вставить("boolField" , Новый Структура("__OPI_BOOLEAN__" , Истина));
|
СтруктураДокумента.Вставить("boolField" , Новый Структура("__OPI_BOOLEAN__" , Истина));
|
||||||
СтруктураДокумента.Вставить("dateField" , Новый Структура("__OPI_DATETIME__" , "1763204141"));
|
СтруктураДокумента.Вставить("dateField" , Новый Структура("__OPI_DATETIME__" , "1763204141"));
|
||||||
СтруктураДокумента.Вставить("tsField" , Новый Структура("__OPI_TIMESTAMP__", ТекущаяДата));
|
СтруктураДокумента.Вставить("tsField" , Новый Структура("__OPI_TIMESTAMP__", ТекущаяДата));
|
||||||
@@ -25023,7 +25025,7 @@
|
|||||||
|
|
||||||
МассивДокументов.Добавить(СтруктураДокумента);
|
МассивДокументов.Добавить(СтруктураДокумента);
|
||||||
|
|
||||||
Результат = OPI_MongoDB.ВставитьДокументы(Соединение, "new_collection", МассивДокументов, База);
|
Результат = OPI_MongoDB.ВставитьДокументы(Соединение, Коллекция, МассивДокументов, База);
|
||||||
|
|
||||||
// END
|
// END
|
||||||
|
|
||||||
@@ -25031,6 +25033,33 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура 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", -1);
|
||||||
|
Параметры = Новый Структура("limit", 2);
|
||||||
|
|
||||||
|
Результат = OPI_MongoDB.ПолучитьДокументы(Соединение, Коллекция, База, Фильтр, Сортировка, Параметры);
|
||||||
|
|
||||||
|
// END
|
||||||
|
|
||||||
|
Обработать(Результат, "MongoDB", "ПолучитьДокументы");
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user