Я пишу API для своего проекта и одна из его функций — сортировка данных, полученных из базы данных. Используя все локально на своем ноутбуке и Swagger, все работает как надо, но когда я запускаю тот же код на сервере, у меня начинаются проблемы с датой. Сортировка прерывается и возвращает пустые списки
Пытался исправить разными методами, например форматированием полученных данных, но проблему это не решило
Мой код:
public class Sort
{
private readonly IMongoDatabase _database;
public double sumExpense { get; private set; } = 0.0;
public Sort()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
string? mongodbKey = configuration["Tokens:MongoDbConnection"];
MongoClient client = new(mongodbKey);
_database = client.GetDatabase("finances");
}
public async Task RunAsync(AuthData request, double ID)
{
var collection = _database.GetCollection("Expense");
string format = "yyyy-MM-dd";
if (!DateTime.TryParseExact(request.FirstDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime firstDateTime) ||
!DateTime.TryParseExact(request.LastDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime lastDateTime))
{
return new BsonDocument
{
{ "Error", "Invalid date format" }
};
}
var startOfFirstDay = new DateTime(firstDateTime.Year, firstDateTime.Month, firstDateTime.Day, 0, 0, 0, DateTimeKind.Unspecified);
var endOfLastDay = new DateTime(lastDateTime.Year, lastDateTime.Month, lastDateTime.Day, 23, 59, 59, DateTimeKind.Unspecified);
var idFilter = Builders.Filter.Eq("User", ID);
var dateFilter = Builders.Filter.Gte("Date", startOfFirstDay) &
Builders.Filter.Lte("Date", endOfLastDay);
var combinedFilter = idFilter & dateFilter;
var sortedByCategoryTask = AsyncSortingByCategory(collection, combinedFilter);
var sortedByTagsTask = AsyncSortingByTegs(collection, combinedFilter);
await Task.WhenAll(sortedByCategoryTask, sortedByTagsTask);
var bsonDocument = new BsonDocument
{
{ "Category", sortedByCategoryTask.Result },
{ "Tegs", sortedByTagsTask.Result }
};
return bsonDocument;
}
private async Task AsyncSortingByCategory(
IMongoCollection collection,
FilterDefinition filter)
{
var sortedData = new BsonDocument();
var sortDefinition = Builders.Sort.Ascending("Category");
var documents = await collection
.Find(filter)
.Sort(sortDefinition)
.ToListAsync();
foreach (var document in documents)
{
string categoryName = document["Category"].AsString;
double sum = document["Sum"] switch
{
BsonDouble bsonDouble => bsonDouble.Value,
BsonInt64 bsonInt64 => bsonInt64.Value,
BsonDecimal128 bsonDecimal => (double)bsonDecimal.Value,
_ => Convert.ToDouble(document["Sum"])
};
if (!sortedData.Contains(categoryName))
{
sortedData[categoryName] = new BsonArray();
}
sumExpense += sum;
var array = sortedData[categoryName].AsBsonArray;
array.Add(document);
}
return sortedData;
}
private async Task AsyncSortingByTegs(
IMongoCollection collection,
FilterDefinition filter)
{
var options = new JsonSerializerOptions
{
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
WriteIndented = true
};
var sortedData = new BsonDocument();
var documents = await collection.Find(filter).ToListAsync();
foreach (var document in documents)
{
if (document["Tegs"].IsBsonArray)
{
BsonArray tegs = document["Tegs"].AsBsonArray;
foreach (string teg in tegs)
{
if (!sortedData.Contains(teg))
{
sortedData[teg] = new BsonArray();
}
var array = sortedData[teg].AsBsonArray;
array.Add(document);
}
}
}
return sortedData;
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... the-server
Как исправить сортировку дат на сервере ⇐ C#
Место общения программистов C#
1733690083
Anonymous
Я пишу API для своего проекта и одна из его функций — сортировка данных, полученных из базы данных. Используя все локально на своем ноутбуке и Swagger, все работает как надо, но когда я запускаю тот же код на сервере, у меня начинаются проблемы с датой. Сортировка прерывается и возвращает пустые списки
Пытался исправить разными методами, например форматированием полученных данных, но проблему это не решило
Мой код:
public class Sort
{
private readonly IMongoDatabase _database;
public double sumExpense { get; private set; } = 0.0;
public Sort()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
string? mongodbKey = configuration["Tokens:MongoDbConnection"];
MongoClient client = new(mongodbKey);
_database = client.GetDatabase("finances");
}
public async Task RunAsync(AuthData request, double ID)
{
var collection = _database.GetCollection("Expense");
string format = "yyyy-MM-dd";
if (!DateTime.TryParseExact(request.FirstDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime firstDateTime) ||
!DateTime.TryParseExact(request.LastDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime lastDateTime))
{
return new BsonDocument
{
{ "Error", "Invalid date format" }
};
}
var startOfFirstDay = new DateTime(firstDateTime.Year, firstDateTime.Month, firstDateTime.Day, 0, 0, 0, DateTimeKind.Unspecified);
var endOfLastDay = new DateTime(lastDateTime.Year, lastDateTime.Month, lastDateTime.Day, 23, 59, 59, DateTimeKind.Unspecified);
var idFilter = Builders.Filter.Eq("User", ID);
var dateFilter = Builders.Filter.Gte("Date", startOfFirstDay) &
Builders.Filter.Lte("Date", endOfLastDay);
var combinedFilter = idFilter & dateFilter;
var sortedByCategoryTask = AsyncSortingByCategory(collection, combinedFilter);
var sortedByTagsTask = AsyncSortingByTegs(collection, combinedFilter);
await Task.WhenAll(sortedByCategoryTask, sortedByTagsTask);
var bsonDocument = new BsonDocument
{
{ "Category", sortedByCategoryTask.Result },
{ "Tegs", sortedByTagsTask.Result }
};
return bsonDocument;
}
private async Task AsyncSortingByCategory(
IMongoCollection collection,
FilterDefinition filter)
{
var sortedData = new BsonDocument();
var sortDefinition = Builders.Sort.Ascending("Category");
var documents = await collection
.Find(filter)
.Sort(sortDefinition)
.ToListAsync();
foreach (var document in documents)
{
string categoryName = document["Category"].AsString;
double sum = document["Sum"] switch
{
BsonDouble bsonDouble => bsonDouble.Value,
BsonInt64 bsonInt64 => bsonInt64.Value,
BsonDecimal128 bsonDecimal => (double)bsonDecimal.Value,
_ => Convert.ToDouble(document["Sum"])
};
if (!sortedData.Contains(categoryName))
{
sortedData[categoryName] = new BsonArray();
}
sumExpense += sum;
var array = sortedData[categoryName].AsBsonArray;
array.Add(document);
}
return sortedData;
}
private async Task AsyncSortingByTegs(
IMongoCollection collection,
FilterDefinition filter)
{
var options = new JsonSerializerOptions
{
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
WriteIndented = true
};
var sortedData = new BsonDocument();
var documents = await collection.Find(filter).ToListAsync();
foreach (var document in documents)
{
if (document["Tegs"].IsBsonArray)
{
BsonArray tegs = document["Tegs"].AsBsonArray;
foreach (string teg in tegs)
{
if (!sortedData.Contains(teg))
{
sortedData[teg] = new BsonArray();
}
var array = sortedData[teg].AsBsonArray;
array.Add(document);
}
}
}
return sortedData;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79262381/how-to-fix-date-sorting-on-the-server[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия