Как применить разные фильтры для каждого поля yField в конвейере агрегации MongoDB в Blazor WASM?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как применить разные фильтры для каждого поля yField в конвейере агрегации MongoDB в Blazor WASM?

Сообщение Anonymous »

Я создаю приложение Blazor WASM, которое генерирует диаграммы с использованием MongoDB. Моя текущая реализация объединяет данные из коллекции MongoDB и поддерживает несколько значений yField для группировки и агрегирования.
Текущий код работает для одного фильтра совпадений, который применяется к все поля, но мне нужно добавить отдельные фильтры для каждого yField. Вот соответствующая часть моего кода:

Код: Выделить всё

    [Authorize]
[HttpPost("GetChartDataAsync")]
public async Task GetChartData(chartclass chart)
{
var collection = GetMyDb().MDB.GetCollection("d_sales_date");

var groupStage = new BsonDocument
{
{ "_id", $"${chart.xfield}" }
};

foreach (var y in chart.yfield)
{
Aggregations aggregate = Aggregations.Sum;
var aggregationOperator = aggregate switch
{
Aggregations.Sum => "$sum",
Aggregations.Min => "$min",
Aggregations.Max => "$max",
Aggregations.Average => "$avg",
_ => "$sum"
};

//y field filters

groupStage.Add(y.name, new BsonDocument(aggregationOperator, $"${y.name}"));
}

var pipeline = new List
{
new BsonDocument("$group", groupStage)
};

var results = await collection.Aggregate(pipeline).ToListAsync();

return results.ToJson();
}

public class chartclass
{
public string xfield { get; set; } = "";
public List yfield { get; set; } = new();
}

public class YField
{
public string name { get; set; } = "";
public BsonDocument filter { get; set; } = new();
public Aggregations aggregate { get; set; } = Aggregations.Sum;
}
Мне нужно разрешить каждому yField иметь собственный фильтр (определенный в yField.filter), чтобы я мог сопоставлять определенные подмножества данных для каждого агрегата.
Например:
Для yField1 примените фильтр совпадения, где полеA > 100.
/>Для yField2, примените фильтр соответствия, где полеB == "значение".
Желаемое поведение:
Я хочу изменить конвейер, включив в него условные этапы $match для каждого поля yField перед добавлением его логики агрегирования на этап $group.
Любые рекомендации и предложения будут рассмотрены. очень признателен.

Подробнее здесь: https://stackoverflow.com/questions/792 ... pipeline-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»