UNPKG

flexmonster-mongo-connector

Version:

MongoDB connector for Flexmonster Pivot Table and Charts

50 lines 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GroupingQueryBuilder = void 0; const SupportedAggregations_1 = require("../../utils/consts/SupportedAggregations"); const Delimeters_1 = require("../../utils/consts/Delimeters"); const MongoPipelineStages_1 = require("../../utils/consts/MongoPipelineStages"); class GroupingQueryBuilder { constructor() { } buildGroupStage(query) { let groupStage = {}; let valuesArray = query.values; let key = null; let value = null; let keyValueField = null; let fieldValueObject = null; if (valuesArray != null) { for (let i = 0; i < valuesArray.length; i++) { value = valuesArray[i]; fieldValueObject = value.field; key = SupportedAggregations_1.SupportedAggregations.numericFieldAggregations[value.func]; keyValueField = fieldValueObject.uniqueName.replace(/\./g, Delimeters_1.Delimeter.DOTS_DELIMETER); groupStage[keyValueField + Delimeters_1.Delimeter.FIELD_DELIMETER + value.func] = {}; groupStage[keyValueField + Delimeters_1.Delimeter.FIELD_DELIMETER + value.func][key] = value.func == "count" ? 1 : "$" + fieldValueObject.uniqueName; } } groupStage["_id"] = {}; if (query.by) { this._parseRowsColumns(query.by.rows, groupStage["_id"]); this._parseRowsColumns(query.by.cols, groupStage["_id"]); } return { [MongoPipelineStages_1.MongoPipelineStages.GROUP]: groupStage }; } _parseRowsColumns(query, rowColumnsGroupQuery) { if (query == null) return rowColumnsGroupQuery; let key = null; let fieldValueObject = null; for (let i = 0; i < query.length; i++) { fieldValueObject = query[i]; key = fieldValueObject.uniqueName.replace(/\./g, Delimeters_1.Delimeter.DOTS_DELIMETER); rowColumnsGroupQuery[key] = "$" + fieldValueObject.uniqueName; } return rowColumnsGroupQuery; } } exports.GroupingQueryBuilder = GroupingQueryBuilder; //# sourceMappingURL=GroupingQueryBuilder.js.map