Код: Выделить всё
public class PivotRequest
{
public List Rows { get; set; } // E.g., ["Category", "Sub-Category"]
public List Columns { get; set; } // E.g., ["Region", "Salesperson"]
public List Values { get; set; } // E.g., ["Amount", "Quantity"]
}
[Authorize]
[HttpPost("GetPivotTableAsync")]
public async Task GetPivotTableAsync(PivotRequest request)
{
var pipeline = new List();
// AddFields to ensure values are numeric
foreach (var value in request.Values)
{
pipeline.Add(new BsonDocument("$addFields", new BsonDocument(value, new BsonDocument("$toDouble", $"${value}"))));
}
// Grouping Key
var groupKey = new BsonDocument();
foreach (var row in request.Rows)
groupKey.Add(row, $"${row}");
foreach (var column in request.Columns)
groupKey.Add(column, $"${column}");
// $group stage with accumulations
var groupStage = new BsonDocument("$group", new BsonDocument { { "_id", groupKey } });
foreach (var value in request.Values)
{
groupStage["$group"].AsBsonDocument.Add(value, new BsonDocument("$sum", new BsonDocument("$ifNull", new BsonArray { $"${value}", 0 })));
}
pipeline.Add(groupStage);
// Projection to flatten the output
var projection = new BsonDocument { { "_id", 0 } };
foreach (var row in request.Rows)
projection.Add(row, $"$_id.{row}");
foreach (var column in request.Columns)
projection.Add(column, $"$_id.{column}");
foreach (var value in request.Values)
projection.Add(value, $"${value}");
pipeline.Add(new BsonDocument("$project", projection));
// Execute pipeline
var collection = GetMyDb().MDB.GetCollection("d_sales_date");
var result = await collection.Aggregate(pipeline).ToListAsync();
return result.ToJson();
}

На этом изображении есть одна группа строк с отдельными столбцами. например Всего по аксессуарам, Всего по электронике, Итого по Востоку, Итого по Северу. Он также имеет общий итог для всех строк и столбцов, а также общий итог для всей таблицы. Текущий конвейер генерирует только Периферийные устройства с Алисой, Периферийные устройства с Бобом, мощность с Бобом и т. д.
Как я могу изменить свой конвейер агрегации MongoDB, чтобы включить эти строки и динамические итоги столбцов?
Будем благодарны за любые рекомендации и предложения.>
Подробнее здесь: https://stackoverflow.com/questions/792 ... lazor-wasm