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:
@@ -19,8 +19,12 @@ pub fn json_value_to_bson(value: &Value) -> Result<Bson, String> {
|
||||
},
|
||||
Value::Object(obj) => {
|
||||
|
||||
if let Some(str) = obj.get("__OPI_STRING__"){
|
||||
return Ok(Bson::String(str.to_string()))
|
||||
if let Some(str_value) = obj.get("__OPI_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__") {
|
||||
@@ -87,12 +91,20 @@ pub fn json_value_to_bson(value: &Value) -> Result<Bson, String> {
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(s) = obj.get("__OPI_JS__"){
|
||||
return Ok(Bson::JavaScriptCode(s.to_string()))
|
||||
if let Some(js_value) = obj.get("__OPI_JS__") {
|
||||
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__"){
|
||||
return Ok(Bson::Symbol(s.to_string()))
|
||||
if let Some(symbol_value) = obj.get("__OPI_SYMBOL__") {
|
||||
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__") {
|
||||
|
||||
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", Коллекция, База, Параметры);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@@ -410,6 +410,9 @@
|
||||
|
||||
ИначеЕсли Тип = "Коллекция" Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение);
|
||||
|
||||
ИначеЕсли Тип = "КлючИЗначение" Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Значение);
|
||||
|
||||
ИначеЕсли Тип = "Булево" Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Значение);
|
||||
|
||||
@@ -12173,6 +12173,14 @@
|
||||
|
||||
Функция Проверка_MongoDB_ВставитьДокументы(Знач Результат, Знач Вариант)
|
||||
|
||||
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||
ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Проверка_MongoDB_ПолучитьДокументы(Знач Результат, Знач Вариант)
|
||||
|
||||
ОжидаетЧто(Результат["result"]).Равно(Истина);
|
||||
Возврат Результат;
|
||||
|
||||
|
||||
@@ -3239,6 +3239,7 @@
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||
|
||||
MongoDB_ВставитьДокументы(ПараметрыТеста);
|
||||
MongoDB_ПолучитьДокументы(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -24963,6 +24964,7 @@
|
||||
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль, ПараметрыПодключения);
|
||||
Соединение = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
|
||||
|
||||
Коллекция = "new_collection";
|
||||
МассивДокументов = Новый Массив;
|
||||
|
||||
// С неявным приведением типов
|
||||
@@ -24999,7 +25001,7 @@
|
||||
СтруктураДокумента.Вставить("symbolField", Новый Структура("__OPI_SYMBOL__" , "Y"));
|
||||
СтруктураДокумента.Вставить("int32Field" , Новый Структура("__OPI_INT32__" , 10));
|
||||
СтруктураДокумента.Вставить("int64Field" , Новый Структура("__OPI_INT64__" , 1000));
|
||||
СтруктураДокумента.Вставить("doubleField", Новый Структура("__OPI_DOUBLE__" , 123.456));
|
||||
СтруктураДокумента.Вставить("doubleField", Новый Структура("__OPI_DOUBLE__" , 124.456));
|
||||
СтруктураДокумента.Вставить("boolField" , Новый Структура("__OPI_BOOLEAN__" , Истина));
|
||||
СтруктураДокумента.Вставить("dateField" , Новый Структура("__OPI_DATETIME__" , "1763204141"));
|
||||
СтруктураДокумента.Вставить("tsField" , Новый Структура("__OPI_TIMESTAMP__", ТекущаяДата));
|
||||
@@ -25023,7 +25025,7 @@
|
||||
|
||||
МассивДокументов.Добавить(СтруктураДокумента);
|
||||
|
||||
Результат = OPI_MongoDB.ВставитьДокументы(Соединение, "new_collection", МассивДокументов, База);
|
||||
Результат = OPI_MongoDB.ВставитьДокументы(Соединение, Коллекция, МассивДокументов, База);
|
||||
|
||||
// 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