flexmonster-mongo-connector
Version:
MongoDB connector for Flexmonster Pivot Table and Charts
50 lines • 2.28 kB
JavaScript
;
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