Форматирование агрегации MongoDB для столбцов Highcharts Stacked - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь построить диаграмму с накоплением столбцов с накоплением , отображающую количество кнопок в одной категории таблицы.Для этого я построил следующую агрегацию в mongodb:

var pipeline = [ 
      { 
        $group: {
          _id: {tableId: "$tableId", buttonId: "$buttonId"},
          count: {
            $sum: 1
          }
        }
      }
    ];

Это дает мне объект JSON со следующей иерархией:

0:
   count: 5
   _id:
      buttonId: "buttonId1"
      tableId: "Table1"

Я пытаюсь перенести это вформат, подходящий для высоких графиков, что-то вроде этого:

        var buttonPerTable = [{
                name: 'buttonId1',
                data: [5, 3, 4]
            }, {
                name: 'buttonId2',
                data: [2, 2, 3]
            }, {
                name: 'buttonId3',
                data: [3, 4, 4]
            }]
    var tableList = ["Table1","Table2","Table3"]

Это то, что я пробовал, но я не могу понять, как это сделать правильно, я не могу получить данныев желаемый формат:

var activityPerTable = [];
var tableList = [];    
result.forEach(function(call, i) {
                buttonId = call._id.buttonId
                activityPerTable[buttonId] = []
                activityPerTable[buttonId].data = []
                activityPerTable[buttonId].name = buttonId;
                activityPerTable[buttonId].data.push(call.count);
                tableList.push(call._id.tableId);
            });

            tableList = Utils.uniqueArray(tableList);

Любая помощь будет оценена.

Редактировать:

Вот кусок объекта JSON:

[
{
    "_id": {
      "tableId": "table1",
      "buttonId": "buttonId1"
    },
    "count": 1
  },
  {
    "_id": {
      "tableId": "table2",
      "buttonId": "buttonId3"
    },
    "count": 10
  },
  {
    "_id": {
      "tableId": "table2",
      "buttonId": "buttonId1"
    },
    "count": 12
  },
  {
    "_id": {
      "tableId": "table1",
      "buttonId": "buttonId2"
    },
    "count": 8
  },
  {
    "_id": {
      "tableId": "table1",
      "buttonId": "buttonId2"
    },
    "count": 2
  },
  {
    "_id": {
      "tableId": "table3",
      "buttonId": "buttonId1"
    },
    "count": 3
  },
  {
    "_id": {
      "tableId": "table3",
      "buttonId": "buttonId2"
    },
    "count": 6
  }
]

1 Ответ

0 голосов
/ 23 октября 2018

Было бы немного проще, если бы одни и те же имена были в порядке рядом.Однако вы можете конвертировать JSON в формат, требуемый Highcharts, следующим образом:

Highcharts.each(data, function(el) {
    if (series.length) {
        for (i = 0; i < series.length; i++) {
            if (series[i].name === el._id.buttonId) {
                series[i].data.push(el.count);
                i = series.length + 1;
            }
        }
    }

    if (!series.length || i === series.length) {
        series.push({
            name: el._id.buttonId,
            data: [el.count]
        });
    }
});

Демонстрационная версия: http://jsfiddle.net/BlackLabel/tnhv8u62/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...